0

Nur eine kurze Frage über ReadWriteLocks in Java (speziell die ReentrantReadWriteLock-Implementierung), da ich die Sun-Dokumentation nicht klar finde.Java ReentrantReadWriteLock Anfragen

Was passiert, wenn eine Lesesperre von einem Thread gehalten wird, wenn eine Schreibsperre von einer anderen angefordert wird? Muss der Schreibsperr-Thread warten, bis alle aktuell gehaltenen Lese-Locks freigegeben sind? Werden außerdem alle neuen Leseverriegelungsanforderungen blockiert, bis die Schreibsperre erteilt und freigegeben wird?

Dank

Antwort

3

Die Javadoc erklärt dies:

Diese Klasse keinen Leser oder Schriftsteller Präferenzordnung für Sperre Zugang erlegt. Es unterstützt jedoch eine optionale Fairness Politik. Wenn sie als fair konstruiert werden, konkurrieren Threads für den Eintrag unter Verwendung einer ungefähren Ankunftsreihenfolge-Richtlinie . Wenn die Schreibsperre freigegeben wird entweder der am längsten wartet einzelne Schreiber die Schreib Sperre zugeordnet werden, oder wenn ein Leser ist länger als jeder Schriftsteller wartet, wird der Satz von Lesern der Sperre liest zugeordnet werden. Bei der Errichtung als nicht fair, muss die Reihenfolge des Zugangs zum Schloss nicht in der Reihenfolge der Ankunft sein. In beiden Fall, wenn die Leser werden aktiv und ein Schreiber betritt sind die Sperre dann keine nachfolgenden Leser die Lesesperre bis erteilt danach Schriftsteller erworben und veröffentlicht die Schreib Sperre.


Was passiert, wenn eine Lesesperre von einem Thread gehalten wird, wenn eine Schreibsperre durch ein anderes angefordert wird? Muss der Schreibsperr-Thread warten, bis alle aktuell gehaltenen Lese-Locks freigegeben sind?

Ja, der Schreiber wird warten müssen. Aber es wird nur auf die aktuell gehaltenen Lesesperren warten. Alle Leser, die später ankommen, werden nach dem Schreiber Schlange stehen.

Werden alle neuen Leseverriegelungsanforderungen blockiert, bis die Schreibsperre erteilt und freigegeben wird?

Ja

1

A ReadWriteLock kann nicht eine Schreibsperre an der gleichen Zeit wie Lesesperren gehalten hat. Anforderungen für beispielsweise eine Schreibsperre, wenn eine Lesesperre gehalten wird, führen zu einer Blockierung oder einem Fehlschlagen.