“Alfonse, wait here for my signal!”

At first glance, Java monitors appear easy to use. However, a deeper analysis reveals that they are surprisingly tricky, suffer from subtle race conditions, and are actually a low-level synchronization tool in stark contrast to the reputation Java has as a modern well-engineered language. The programmer is responsible for building safe and robust synchronization structures from Java monitors.