jedes Java-Objekt kann als lock (Monitor, Sperre) dienen
synchronized
-Blöcke: Betreten bei Lock-Besitz,
Verlassen mit Lock-Rückgabe,
für jeden Lock: zu jedem Zeitpunkt kann ihn höchstens ein Thread besitzen
Object lock = ... synchronized (lock) { ... } // Anweisung synchronized void m () { ... } // Methode ==> void m () { synchronized (this) { ... } }
Locks sind re-entrant, damit aus einer synchronisierten Methode eine andere aufgerufen werden kann (mit dem Lock, den der Thread schon besitzt)