StaticSync.java demonstrates the difference between static synchronized and non-static synchronized methods. Remember that static synchronized methods get their lock from the class, while non-static synchronized methods get their lock on an individual object -- an actual instance of the class on the heap