Heim  >  Artikel  >  Java  >  Detaillierte Erläuterung der Java-Multithread-Parallelitätssperre

Detaillierte Erläuterung der Java-Multithread-Parallelitätssperre

WBOY
WBOYOriginal
2024-04-11 16:21:01957Durchsuche

Der Java-Parallelitätssperrmechanismus stellt sicher, dass in einer Multithread-Umgebung nur ein Thread auf gemeinsam genutzte Ressourcen zugreift. Zu seinen Typen gehören pessimistisches Sperren (Sperre erwerben und dann darauf zugreifen) und optimistisches Sperren (nach dem Zugriff auf Konflikte prüfen). Java bietet integrierte Parallelitätssperrklassen wie ReentrantLock (Mutex-Sperre), Semaphore (Semaphor) und ReadWriteLock (Lese-/Schreibsperre). Durch die Verwendung dieser Sperren kann ein Thread-sicherer Zugriff auf gemeinsam genutzte Ressourcen gewährleistet werden, z. B. wird sichergestellt, dass nur ein Thread seinen Wert aktualisiert, wenn mehrere Threads gleichzeitig auf den Zähler der gemeinsam genutzten Variablen zugreifen.

Detaillierte Erläuterung der Java-Multithread-Parallelitätssperre

Detaillierte Erläuterung der Java-Multithread-Parallelitätssperre

Einführung

In einer Multithread-Umgebung können mehrere Threads gleichzeitig auf gemeinsam genutzte Ressourcen zugreifen, was zu Dateninkonsistenzen oder Programmfehlern führt. Um dies zu verhindern, bietet Java einen Parallelitätssperrmechanismus, der sicherstellt, dass jeweils nur ein Thread auf gemeinsam genutzte Ressourcen zugreift.

Typen von Parallelitätssperren

Es gibt zwei Haupttypen von Parallelitätssperren in Java:

  • Pessimistische Sperre: Es wird davon ausgegangen, dass alle Threads auf gemeinsam genutzte Ressourcen zugreifen, daher wird die Sperre erworben, bevor auf die gemeinsam genutzten Ressourcen zugegriffen wird. Dies führt zu häufigeren Kontextwechseln, allerdings auf Kosten einer geringeren Parallelität.
  • Optimistische Sperre: Angenommen, dass die meisten Threads nicht auf gemeinsam genutzte Ressourcen zugreifen, sodass Konflikte erst nach dem Zugriff auf gemeinsam genutzte Ressourcen überprüft werden. Wenn ein Konflikt auftritt, wird der Vorgang zurückgesetzt. Dies führt zu weniger Kontextwechseln, allerdings auf Kosten einer größeren Anzahl möglicher Konflikte.

Parallelitätssperren in Java

Die folgenden integrierten Klassen für Parallelitätssperren werden in Java bereitgestellt:

  • ReentrantLock: Ein wiedereintrittsfähiger Mutex, d. h. ein Thread kann dieselbe Sperre mehrmals erwerben.
  • Semaphor: Ein Zählsemaphor, der zur Steuerung der maximalen Anzahl gleichzeitiger Threads verwendet wird, die auf gemeinsam genutzte Ressourcen zugreifen.
  • ReadWriteLock: Eine Lese-/Schreibsperre, die es mehreren Threads ermöglicht, gemeinsam genutzte Ressourcen gleichzeitig zu lesen, aber nur einem Thread das Schreiben auf gemeinsam genutzte Ressourcen ermöglicht.

Praktischer Fall

Angenommen, wir haben zwei Threads, die gleichzeitig auf eine gemeinsam genutzte Variable counter zugreifen, und wir möchten sicherstellen, dass nur ein Thread den Wert von counter aktualisiert. code> nacheinander. Wir können <code>ReentrantLock verwenden, um dies zu erreichen: counter,并且我们要确保一次只有一个线程更新 counter 的值。我们可以使用 ReentrantLock 来实现:

public class Counter {

    private int counter;
    private ReentrantLock lock = new ReentrantLock();

    public int getCounter() {
        lock.lock();
        try {
            return counter;
        } finally {
            lock.unlock();
        }
    }

    public void incrementCounter() {
        lock.lock();
        try {
            counter++;
        } finally {
            lock.unlock();
        }
    }
}

在这个示例中,getCounter()incrementCounter() 方法都使用 lock 来确保对 counterrrreee

In diesem Beispiel verwenden sowohl die Methoden getCounter() als auch incrementCounter() lock , um sicherzustellen, dass der Zugriff auf counter threadsicher ist. 🎜

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Java-Multithread-Parallelitätssperre. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn