Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Thread-Synchronisation | Grundlagen der Nebenläufigkeit
Multithreading in Java

bookThread-Synchronisation

Synchronisierte Methoden und Blöcke

Synchronisierte Methoden und Blöcke in Java verhindern, dass mehrere Threads gleichzeitig auf dieselbe Ressource zugreifen. Dies hilft, Probleme wie Datenrennen zu vermeiden, bei denen mehrere Threads versuchen, eine gemeinsam genutzte Ressource gleichzeitig zu verändern.

Praxisbeispiel: Stellen Sie sich ein Lagerhaus mit nur einem Eingang und Ausgang vor. Wenn mehrere Personen gleichzeitig dieselbe Tür benutzen wollen, entsteht Chaos. Synchronisation in der Programmierung wirkt wie ein Kontrolleur an der Tür, der jeweils nur einer Person den Durchgang erlaubt, um Kollisionen zu verhindern.

Synchronisierte Methoden

Wenn eine Methode mit dem Schlüsselwort synchronized deklariert wird, sperrt sie das Objekt, zu dem die Methode gehört, automatisch für die Dauer der Ausführung der Methode.

Codebeispiel

Main.java

Main.java

copy
123
public synchronized void increment() { //Adding the synchronized count++; }

In diesem Beispiel ist die Methode increment() synchronisiert, was bedeutet, dass jeweils nur ein Thread diese Methode ausführen kann.

Synchronisierte Blöcke

Synchronisierte Blöcke ermöglichen die Synchronisierung eines bestimmten Abschnitts einer Methode, was nützlich ist, wenn nur ein bestimmter Teil des Codes synchronisiert werden soll.

Codebeispiel

Main.java

Main.java

copy
12345
public void increment() { synchronized(this) { count++; } }

In diesem Beispiel wird nur der Code innerhalb von synchronized(this) synchronisiert, was die Leistung verbessert, wenn nicht die gesamte Methode synchronisiert werden muss.

Note
Hinweis

Im synchronized(this)-Block bedeutet das Schlüsselwort this, dass der Codeblock auf der aktuellen Instanz des Objekts synchronisiert wird, also speziell auf dem Objekt, für das diese Methode aufgerufen wird.

Objektmonitore

Wenn ein Thread einen Objektmonitor übernimmt, erhält er exklusiven Zugriff auf synchronisierte Methoden oder Blöcke dieses Objekts. Andere Threads, die versuchen, synchronisierte Methoden oder Blöcke desselben Objekts zu betreten, werden blockiert, bis der Monitor freigegeben wird.

Methoden wait(), notify(), notifyAll()

Die Methode wait() wird verwendet, um die Ausführung des aktuellen Threads zu unterbrechen und die von ihm belegten Ressourcen freizugeben, bis ein anderer Thread die Methode notify() oder notifyAll() für dasselbe Monitorobjekt aufruft.

Die Methoden notify() und notifyAll() dienen dazu, die Ausführung eines oder aller auf einem Monitorobjekt blockierten Threads fortzusetzen.

Note
Hinweis

Die Methoden wait(), notify() und notifyAll() müssen innerhalb eines synchronisierten Blocks aufgerufen werden, der mit demselben Monitorobjekt wie der wartende Thread verknüpft ist, um eine korrekte Synchronisation zu gewährleisten.

Im nächsten Kapitel untersuchen wir, was passieren kann, wenn Synchronisierung nicht verwendet wird.

1. Was bewirkt das Schlüsselwort synchronized in Java?

2. Wie funktioniert der Objektmonitor in Java?

question mark

Was bewirkt das Schlüsselwort synchronized in Java?

Select the correct answer

question mark

Wie funktioniert der Objektmonitor in Java?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 1. Kapitel 4

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Awesome!

Completion rate improved to 3.33

bookThread-Synchronisation

Swipe um das Menü anzuzeigen

Synchronisierte Methoden und Blöcke

Synchronisierte Methoden und Blöcke in Java verhindern, dass mehrere Threads gleichzeitig auf dieselbe Ressource zugreifen. Dies hilft, Probleme wie Datenrennen zu vermeiden, bei denen mehrere Threads versuchen, eine gemeinsam genutzte Ressource gleichzeitig zu verändern.

Praxisbeispiel: Stellen Sie sich ein Lagerhaus mit nur einem Eingang und Ausgang vor. Wenn mehrere Personen gleichzeitig dieselbe Tür benutzen wollen, entsteht Chaos. Synchronisation in der Programmierung wirkt wie ein Kontrolleur an der Tür, der jeweils nur einer Person den Durchgang erlaubt, um Kollisionen zu verhindern.

Synchronisierte Methoden

Wenn eine Methode mit dem Schlüsselwort synchronized deklariert wird, sperrt sie das Objekt, zu dem die Methode gehört, automatisch für die Dauer der Ausführung der Methode.

Codebeispiel

Main.java

Main.java

copy
123
public synchronized void increment() { //Adding the synchronized count++; }

In diesem Beispiel ist die Methode increment() synchronisiert, was bedeutet, dass jeweils nur ein Thread diese Methode ausführen kann.

Synchronisierte Blöcke

Synchronisierte Blöcke ermöglichen die Synchronisierung eines bestimmten Abschnitts einer Methode, was nützlich ist, wenn nur ein bestimmter Teil des Codes synchronisiert werden soll.

Codebeispiel

Main.java

Main.java

copy
12345
public void increment() { synchronized(this) { count++; } }

In diesem Beispiel wird nur der Code innerhalb von synchronized(this) synchronisiert, was die Leistung verbessert, wenn nicht die gesamte Methode synchronisiert werden muss.

Note
Hinweis

Im synchronized(this)-Block bedeutet das Schlüsselwort this, dass der Codeblock auf der aktuellen Instanz des Objekts synchronisiert wird, also speziell auf dem Objekt, für das diese Methode aufgerufen wird.

Objektmonitore

Wenn ein Thread einen Objektmonitor übernimmt, erhält er exklusiven Zugriff auf synchronisierte Methoden oder Blöcke dieses Objekts. Andere Threads, die versuchen, synchronisierte Methoden oder Blöcke desselben Objekts zu betreten, werden blockiert, bis der Monitor freigegeben wird.

Methoden wait(), notify(), notifyAll()

Die Methode wait() wird verwendet, um die Ausführung des aktuellen Threads zu unterbrechen und die von ihm belegten Ressourcen freizugeben, bis ein anderer Thread die Methode notify() oder notifyAll() für dasselbe Monitorobjekt aufruft.

Die Methoden notify() und notifyAll() dienen dazu, die Ausführung eines oder aller auf einem Monitorobjekt blockierten Threads fortzusetzen.

Note
Hinweis

Die Methoden wait(), notify() und notifyAll() müssen innerhalb eines synchronisierten Blocks aufgerufen werden, der mit demselben Monitorobjekt wie der wartende Thread verknüpft ist, um eine korrekte Synchronisation zu gewährleisten.

Im nächsten Kapitel untersuchen wir, was passieren kann, wenn Synchronisierung nicht verwendet wird.

1. Was bewirkt das Schlüsselwort synchronized in Java?

2. Wie funktioniert der Objektmonitor in Java?

question mark

Was bewirkt das Schlüsselwort synchronized in Java?

Select the correct answer

question mark

Wie funktioniert der Objektmonitor in Java?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 1. Kapitel 4
some-alt