Here are some common cases that imply synchronizations:
- Two threads can execute concurrently a synchronized static method and a non-static method of the same class (see the OllAndCll class of the P200_ObjectVsClassLevelLocking app). This works because the threads acquire locks on different objects.
- Two threads cannot concurrently execute two different synchronized static methods (or the same synchronized static method) of the same class (check the TwoCll class of the P200_ObjectVsClassLevelLocking application). This does not work because the first thread acquires a class-level lock. The following combinations will output, staticMethod1(): Thread-0, therefore, only one static synchronized method is executed by only one thread: ...