Chapter 2 - Recipe #3: Using conditions in synchronized code