synchronized und Monitore
synchronized in Java sperrt einen Monitor (Objekt). Nur ein Thread hält den Lock. Sichtbarkeit und atomare Abschnitte werden so hergestellt (happens-before).
Zu grobe Locks bremsen; zu feine sind fehleranfällig.
Wo gebraucht
Klassische JVM-Mutual-Exclusion. Grundlage, bevor man zu java.util.concurrent, Locks und lock-free Strukturen geht.
Vertiefung
Jedes Java-Objekt kann als Monitor dienen. Ein synchronized-Block erwirbt dessen intrinsische Sperre, führt den geschützten Abschnitt aus und gibt die Sperre beim Verlassen auch im Ausnahmefall frei. Nur Code, der denselben Monitor verwendet, schützt dieselbe Invariante gemeinsam.
Das Verlassen eines Monitors veröffentlicht vorherige Änderungen; ein späterer Erwerb desselben Monitors macht sie sichtbar. synchronized regelt damit sowohl gegenseitigen Ausschluss als auch Speicherordnung. Die Wahl eines privaten, stabilen Lockobjekts verhindert unbeabsichtigte externe Sperrkopplung.
Schwierigkeitsstufen
- Den Monitor einer Instanz- und einer statischen Methode bestimmen.
- Alle Zugriffe auf eine Invariante unter dasselbe Lock stellen.
- Lockumfang zwischen Sicherheit und Parallelität abwägen.
Fallstricke
Zwei verschiedene Lockobjekte schützen nicht gegeneinander. Öffentlich erreichbare oder wechselnde Lockobjekte sind ebenfalls riskant. Mehrere Sperren in uneinheitlicher Reihenfolge können einen Deadlock erzeugen.
Tasks
Card Info
- Topic: Algorithmen und Datenstrukturen
- Difficulty: Intermediate
- Completed: 0 users