Java ReentrantReadWriteLock Anfragen
-
11-09-2019 - |
Frage
Nur eine kurze Frage zu ReadWriteLocks in Java (speziell die ReentrantReadWriteLock Implementierung), wie ich finde nicht die Sonne Dokumentation klar.
Was passiert, wenn eine Lesesperre von einem Thread gehalten wird, wenn eine Schreibsperre durch ein anderes angefordert wird? Hat die Schreibsperre Thread für alle derzeit gehaltenen Lesesperren warten, um zu erscheinen? Außerdem haben alle neuen Lese-Lock-Anforderungen blockiert werden, bis die Schreibsperre erteilt und freigegeben wird?
Danke
Lösung
Die Javadoc erklärt dies:
Diese Klasse verhängen keinen Leser oder Schriftsteller Präferenzordnung für Schloss-Zugang. Allerdings ist es Unterstützung ein optional Fairness Politik. Wenn sie als Messe aufgebaut, Gewinde kämpfen für den Eintritt unter Verwendung eines etwa Ankunft Ordnung Politik. Wenn die Schreibsperre wird freigegeben entweder die am längsten warten Single Schreiber die Schreib zugeordnet werden sperren, oder wenn es ein Leser wartet länger als jeder Schriftsteller, der Satz von Leser werden die Lese zugeordnet werden sperren. Wenn sie als nicht-Messe aufgebaut, die Reihenfolge der Eingabe an das Schloss Notwendigkeit nicht in der Ankunft Ordnung sein. in jedem Fall, wenn die Leser aktiv sind und ein Schreiber tritt die Sperre dann nicht nachfolgende Leser wird gewährt die Lesesperre erst nach diesem Schriftsteller erworben hat und veröffentlicht die Schreib sperren.
Was passiert, wenn eine Lesesperre von einem Thread gehalten wird, wenn eine Schreibsperre durch ein anderes angefordert wird? Hat die Schreibsperre Thread für alle derzeit gehaltenen Lesesperren warten, um zu erscheinen?
Ja, der Schriftsteller warten müssen. Aber es wird nur für die aktuell gehaltenen Lesesperren warten. Etwaige Leser ankommen später nach dem Schriftsteller Warteschlange.
Auch haben alle neuen Lese-Lock-Anforderungen blockiert werden, bis die Schreibsperre erteilt und freigegeben wird?
Ja
Andere Tipps
Ein ReadWriteLock
kann nicht eine Schreibsperre an der gleichen Zeit wie Lesesperren gehalten hat. Anfragen für, sagen wir, eine Schreibsperre, wenn eine Lesesperre bei der Blockierung oder ein Fail führt statt.