Java and the Intrinsic Lock
I was working on converting a Java application to a multi-threaded application today and wanted to use the simplest means possible. This involves the following steps:   Make the class implement Runnable or descend from the Thread class  Put the previously sequential code into threads  Use the "synchronized" keyword on methods that should be critical sections  Join the threads before working on the results   Now, there are variations on this theme. Because each object in Java has an intrinsic lock, you can use any old Object as a mutex by calling synchronized(object){} around the critical section you want to protect.  so this:   private synchronized foo(){   // critical section stuff }  is the same as this:   private foo(){   synchronized(this){     // critical section stuff   } }   And when trying to synchronize multiple threads, both are wrong!!   The problem is that each object  has an intrinsic lock, not each class. This is easiest to see in the second case. Because each t...