- In einem kritischen Abschnitt darf sich zu jedem Zeitpunkt höchstens immer nur ein Thread befinden
- Es dürfen keine Annahmen über die zugrunde liegende Hardware (Clock, CPU-Anzahl etc.) gemacht werden
- Ein Thread darf andere Threads nicht blockieren, ausser er ist in einem kritischen Bereich
- Es muss sichergestellt sein, dass ein Thread nicht unendlich lange warten muss, bis er in den kritischen Bereich eintreten kann
new, ready, blocked, dead, running, locked
- Alle Java-Objekte besitzen einen impliziten Lock
- Den Zugriff auf den Lock erhält man durch das Schlüsselwort synchronized
- Während des Wartens auf den Lock kann der Thread nicht unterbrochen werden
- reetrant
- Betritt ein Thread eine synchronisierte Methode/Abschnitt, dessen Lock er schon besitzt, kann er sofort eintreten ohne den lock-pool zu durchlaufen
- Ohne diese Möglichkeit würden Rekursion nicht funktionieren!
- Dies reduziert aber auch die Parallelität, weil kritische Abschnitte künstlich vergrössert werden
- Ein Reentrant Monitor kann geschwindigkeitssteigernd sein, wenn viele synchronisierte Methoden hintereinander aufgerufen werden
- nested
- Ein Thread kann beliebig viele Locks ergreifen
- führen leicht zu Verklemmungen (Deadlocks)
- Um die Deadlock-Gefahr zu vermeiden, sollte man in einer synchronisierten Methode oder einem synchronisierten Block niemals die Steuerung an den Client übergeben