Synchronisierung und Sperren
Verwenden Sie synchronized-Blöcke und explizite Sperren, um den Zugriff auf gemeinsam genutzte Ressourcen zu koordinieren.
Synchronisierung und Sperren ist eine kostenlose Java Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 3. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Java Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Java Academy-Kurs umfasst insgesamt 3 Lektionen.
Einführung
Synchronisierung verhindert Race Conditions, wenn mehrere Threads auf gemeinsam genutzte Daten zugreifen.
synchronized
Das Schlüsselwort synchronized stellt sicher, dass jeweils nur ein Thread einen Block oder eine Methode betritt.
Code: synchronized-Methode
Diese synchronized-Methode verhindert Race Conditions beim Erhöhen eines Zählers.
public class Main {
private int count = 0;
public synchronized void increment() {
count++;
}
public static void main(String[] args) throws Exception {
Main obj = new Main();
Thread t1 = new Thread(() -> { for(int i=0;i<1000;i++) obj.increment(); });
Thread t2 = new Thread(() -> { for(int i=0;i<1000;i++) obj.increment(); });
t1.start(); t2.start();
t1.join(); t2.join();
System.out.println("Count = " + obj.count);
}
}
synchronized-Block
Sie können anstelle ganzer Methoden auch nur kritische Abschnitte synchronisieren und dadurch die Konkurrenz um Ressourcen verringern.
Code: synchronized-Block
Ein synchronized-Block schützt nur die Zeile, in der der Zähler erhöht wird, also den kritischen Abschnitt.
public class Main {
private int count = 0;
public void add() {
synchronized(this) {
count++;
}
}
public static void main(String[] args) throws Exception {
Main obj = new Main();
Thread t1 = new Thread(() -> { for(int i=0;i<1000;i++) obj.add(); });
Thread t2 = new Thread(() -> { for(int i=0;i<1000;i++) obj.add(); });
t1.start(); t2.start();
t1.join(); t2.join();
System.out.println("Count = " + obj.count);
}
}
Code: ReentrantLock
ReentrantLock bietet explizite Sperren mit zusätzlicher Flexibilität, beispielsweise tryLock() und Optionen für faire Zugriffsverteilung.
import java.util.concurrent.locks.*;public class Main {
private int count = 0;
private Lock lock = new ReentrantLock();
public void increment() {
lock.lock();
try { count++; }
finally { lock.unlock(); }
}
public static void main(String[] args) throws Exception {
Main obj = new Main();
Thread t1 = new Thread(() -> { for(int i=0;i<1000;i++) obj.increment(); });
Thread t2 = new Thread(() -> { for(int i=0;i<1000;i++) obj.increment(); });
t1.start(); t2.start();
t1.join(); t2.join();
System.out.println("Count = " + obj.count);
}
}
Synchronisierungsprüfung
Schnelltest: Welchen Zweck hat das Schlüsselwort synchronized?
Zusammenfassung
Zusammenfassung: Verwenden Sie synchronized zur gegenseitigen Ausschließung, Blöcke für eine feinere Steuerung und explizite Sperren für fortgeschrittene Szenarien.
Häufig gestellte Fragen
Ist die Lektion „Synchronisierung und Sperren“ kostenlos?
Ja — der vollständige Text von „Synchronisierung und Sperren“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Java Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Java Academy-Kurs umfasst insgesamt 3 Lektionen.
Was lerne ich in „Synchronisierung und Sperren“?
Verwenden Sie synchronized-Blöcke und explizite Sperren, um den Zugriff auf gemeinsam genutzte Ressourcen zu koordinieren. Du übst Java Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Java Academy zu starten?
Keine Vorkenntnisse erforderlich. Java Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 3.
Wie lange dauert die Lektion „Synchronisierung und Sperren“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Java Academy-Lektion Code schreiben und ausführen?
Ja. Jede Java Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Synchronisierung und Sperren
- Atomare und nebenläufige Collections
- Typische Fehler bei Nebenläufigkeit