Java was, from its inception, a language designed for parallelism. It has intrinsic mechanisms like the java.lang.Thread
class as an abstraction for threads, a synchronized
keyword and wait
and notify
methods in every object. This made it fairly unique at the time of its release, at least outside academia. The most common approach for commercially proven languages so far was to use platform-dependent OS library calls for thread management. Naturally, Java needed a platform-independent way to do the same, and what can be better than integrating the mechanisms for parallelism and synchronization into the language itself?
Java is a nice language to work with, when it comes to synchronization. Not only does it have explicit constructs that can be used for threads, locks, and semaphores but it was also designed so that every object in a Java program can conveniently be used as the limiting resource, or monitor object, constraining access to code in a critical section. As of...