suchen
HeimJavajavaLernprogrammWie werden Lese-/Schreibsperren bei der gleichzeitigen Programmierung in Java verwendet?

Die Lese-/Schreibsperre ist ein Mechanismus zur Steuerung der Parallelität, der es mehreren Threads ermöglicht, gemeinsam genutzte Ressourcen gleichzeitig zu lesen, aber jeweils nur ein Thread schreiben kann. Es wird hauptsächlich für Anwendungen mit leseintensiven Arbeitslasten und sporadischen Schreibvorgängen verwendet. In Java können Lese-/Schreibsperren über die Schnittstelle java.util.concurrent.locks.ReadWriteLock implementiert werden, wobei Lesesperren Lesezugriff und Schreibsperren Schreibzugriff ermöglichen. In einem gemeinsam genutzten Zähler können beispielsweise mehrere Threads den Zählerwert gleichzeitig lesen, und der schreibende Thread muss eine Schreibsperre erwerben, um den Zähler zu aktualisieren, um die Atomizität des Schreibens und die Datenintegrität sicherzustellen.

Java 中的读写锁如何用于并发编程?

Lese-/Schreibsperre in Java wird für die gleichzeitige Programmierung verwendet Zeit Geben Sie gemeinsam genutzte Ressourcen ein. Dies ist nützlich für Anwendungen mit leseintensiven Arbeitslasten und gelegentlichen Schreibvorgängen.

Im Gegensatz zu Mutex-Sperren ermöglichen Lese-/Schreibsperren mehreren Lesern den gleichzeitigen Zugriff auf gemeinsam genutzte Ressourcen, während Autoren exklusiven Zugriff auf die Ressource haben.

Verwenden von Lese-/Schreibsperren in Java

Die Schnittstelle

java.util.concurrent.locks.ReadWriteLock

in Java bietet die Funktion von Lese-/Schreibsperren. Es gibt zwei Arten von Sperren:

Lesesperre: Ermöglicht einem Thread, Lesezugriff auf eine freigegebene Ressource zu erhalten.

    Schreibsperre:
  • Ermöglicht einem Thread, Schreibzugriff auf eine freigegebene Ressource zu erhalten.
  • Hier ist ein Beispiel für die Verwendung einer Lese-/Schreibsperre:
  • import java.util.concurrent.locks.ReentrantReadWriteLock;
    
    public class SharedResource {
    
        private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
        private int value;
    
        public void read() {
            lock.readLock().lock();
            try {
                // 读取共享资源
                System.out.println("Reading: " + value);
            } finally {
                lock.readLock().unlock();
            }
        }
    
        public void write(int newValue) {
            lock.writeLock().lock();
            try {
                // 写入共享资源
                value = newValue;
                System.out.println("Writing: " + value);
            } finally {
                lock.writeLock().unlock();
            }
        }
    }
    Praktischer Fall

Stellen Sie sich einen gemeinsamen Zähler vor, bei dem mehrere Threads den Zählerwert lesen, während nur ein Thread ihn aktualisiert. Wir können Lese-/Schreibsperren verwenden, um die Datenintegrität beim gleichzeitigen Zugriff sicherzustellen.

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class CounterExample {

    private final SharedResource counter = new SharedResource();
    private final ExecutorService executor = Executors.newFixedThreadPool(10);

    public void run() {
        // 创建 10 个读取线程
        for (int i = 0; i < 10; i++) {
            executor.submit(counter::read);
        }

        // 模拟写入线程
        for (int i = 0; i < 100; i++) {
            executor.submit(() -> counter.write(i));
        }

        executor.shutdown();
    }

    public static void main(String[] args) {
        new CounterExample().run();
    }
}

In diesem Beispiel können mehrere Lesethreads den Zählerwert gleichzeitig lesen, während der Schreibthread die Schreibsperre erhält, bevor er auf den Zähler zugreift. Dies gewährleistet die Atomizität von Schreibvorgängen und die Datenintegrität.

Das obige ist der detaillierte Inhalt vonWie werden Lese-/Schreibsperren bei der gleichzeitigen Programmierung in Java verwendet?. 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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version

EditPlus chinesische Crack-Version

EditPlus chinesische Crack-Version

Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

PHPStorm Mac-Version

PHPStorm Mac-Version

Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool

MinGW – Minimalistisches GNU für Windows

MinGW – Minimalistisches GNU für Windows

Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Leistungsstarke integrierte PHP-Entwicklungsumgebung