Kursinhalt
Multithreading in Java
Multithreading in Java
Thread-Synchronisation
Synchronisierte Methoden und Blöcke
Synchronisierte Methoden und Blöcke in Java verhindern, dass mehrere Threads gleichzeitig auf die gleiche Ressource zugreifen. Dies hilft, Probleme wie Datenrennen zu vermeiden, bei denen mehrere Threads versuchen, eine gemeinsame Ressource gleichzeitig zu ändern.
Beispiel aus dem echten Leben: Stellen Sie sich ein Lagerhaus mit einem einzigen Eingang und Ausgang vor. Wenn mehrere Personen versuchen, gleichzeitig dieselbe Tür zu benutzen, kann es zu Chaos kommen. Synchronisation in der Programmierung wirkt wie ein Kontrolleur an der Tür, der nur einer Person erlaubt, gleichzeitig hindurchzugehen, um Kollisionen zu vermeiden.
Synchronisierte Methoden
Wenn eine Methode mit dem synchronized
Schlüsselwort deklariert wird, sperrt sie automatisch das Objekt, zu dem die Methode gehört, für die Dauer der Ausführung der Methode.
Codebeispiel
Main
public synchronized void increment() { //Adding the synchronized count++; }
In diesem Beispiel ist die increment()
Methode synchronisiert, was bedeutet, dass nur ein Thread diese Methode zu einem bestimmten Zeitpunkt ausführen kann.
Synchronisierte Blöcke
Synchronisierte Blöcke ermöglichen es Ihnen, nur einen bestimmten Abschnitt einer Methode zu synchronisieren, was nützlich ist, wenn Sie nur einen bestimmten Teil des Codes synchronisieren möchten.
Codebeispiel
Main
public void increment() { synchronized(this) { count++; } }
In diesem Beispiel ist nur der Code innerhalb von synchronized(this)
synchronisiert, was die Leistung verbessert, wenn die gesamte Methode keine Synchronisation benötigt.
Hinweis
Im
synchronized(this)
-Block bedeutet das Schlüsselwortthis
, dass der Codeblock auf der aktuellen Instanz des Objekts synchronisiert ist, speziell auf dem Objekt, für das diese Methode aufgerufen wird.
Objektmonitore
Wenn ein Thread einen Objektmonitor erwirbt, erhält er exklusiven Zugriff auf synchronisierte Methoden oder Blöcke dieses Objekts. Andere Threads, die versuchen, auf synchronisierte Methoden oder Blöcke desselben Objekts zuzugreifen, werden blockiert, bis der Monitor freigegeben wird.
Methoden wait(), notify(), notifyAll()
Die Methode wait()
wird verwendet, um die Ausführung des aktuellen Threads zu suspendieren 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()
werden verwendet, um die Ausführung eines oder aller auf einem Monitorobjekt blockierten Threads fortzusetzen.
Hinweis
Die Methoden
wait()
,notify()
undnotifyAll()
müssen innerhalb eines synchronisierten Blocks aufgerufen werden, der mit demselben Monitorobjekt wie der wartende Thread verbunden ist, um eine ordnungsgemäße Synchronisation sicherzustellen.
Im nächsten Kapitel werden wir untersuchen, was passieren kann, wenn Sie keine Synchronisation verwenden.
1. Was bewirkt das synchronized
Schlüsselwort in Java?
2. Wie funktioniert der Objektmonitor in Java?
Danke für Ihr Feedback!