Sperren werden verwendet, um zu steuern, wie mehrere Threads auf gemeinsam genutzte Ressourcen zugreifen. Im Allgemeinen kann eine Sperre verhindern, dass mehrere Threads gleichzeitig auf gemeinsam genutzte Ressourcen zugreifen.
Die Sperren in Java haben hauptsächlich die folgenden Konzepte:
1. Synchronisationssperre
Gleichzeitig kann nur ein Thread auf eine Synchronisationssperre zugreifen . Basierend auf Objekten wird die Synchronisierung über das synchronisierte Schlüsselwort durchgeführt, um einen sich gegenseitig ausschließenden Zugriff auf konkurrierende Ressourcen zu erreichen.
2. Exklusive Sperre (wiedereintretende Mutex-Sperre)
Sich gegenseitig ausschließend, das heißt, sie kann nur von einem Thread zum gleichen Zeitpunkt gehalten werden; Wird von einem einzelnen Thread gehalten und wird mehrmals erfasst. Was bedeutet es? Gemäß dem Sperrerfassungsmechanismus wird er in „faire Sperre“ und „unfaire Sperre“ unterteilt. Exklusive Sperren werden in Java über ReentrantLock implementiert, das standardmäßig unfaire Sperren verwendet.
3. Faire Sperre
ist eine Art exklusiver Sperre, die der First-Come-First-Served-Regel für Threads folgt, die in der CLH-Warteschlange stehen, um Sperren fair zu erhalten. In Java gibt es in ReetrantLock eine Mitgliedsvariable sync vom Typ Sync. Wenn die Instanz vom Typ FairSync ist, ist ReetrantLock eine faire Sperre. Um die Synchronisierung auf den FairSync-Typ festzulegen, just-Lock lock = new ReetrantLock(true).
4. Unfaire Sperre
bedeutet, dass ein Thread, wenn er eine Sperre erhalten möchte, die CLH-Warteschlange ignoriert und die Sperre direkt erhält. ReetrantLock ist standardmäßig eine unfaire Sperre oder - Lock lock = new ReetrantLock(false).
5. Gemeinsame Sperre
Eine Sperre, die von mehreren Threads gleichzeitig erworben und geteilt werden kann. Das heißt, mehrere Threads können die Sperre erwerben und das Sperrobjekt verarbeiten. Die typische Lesesperre ist ReentrantReadWriteLock.ReadLock. Das heißt, mehrere Threads können es lesen, und es hat keinen Einfluss auf das Lesen anderer Threads, aber niemand kann es ändern. CyclicBarrier, CountDownLatch und Semaphore sind ebenfalls gemeinsame Sperren.
6. Lese-/Schreibsperre
verwaltet ein Paar verwandter Sperren. Die „Lesesperre“ wird für schreibgeschützte Vorgänge verwendet und kann von erworben werden Mehrere Threads gleichzeitig. „Schreibsperre“ wird für Schreibvorgänge verwendet. Es handelt sich um eine „exklusive Sperre“ und kann nur von einer Thread-Sperre erworben werden.
In Java wird die Lese-/Schreibsperre durch die ReadWriteLock-Schnittstelle definiert und ihre Implementierungsklasse ist ReentrantReadWriteLock, einschließlich der internen Klassen ReadLock und WriteLock. Die Methoden readLock() und writeLock() geben die Sperre für die Operation bzw. die Sperre für die Schreiboperation zurück.
Für weitere Java-Kenntnisse beachten Sie bitte das Java-Grundlagen-Tutorial.
Das obige ist der detaillierte Inhalt vonWas ist eine Sperre in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!