Threads synchronized und wait

minzee

Bekanntes Mitglied
Hi :)

Ich verstehe dieses wait noch nicht.

Angenommen, ich habe eine synchronized-Methode mit einem wait darin. Was passiert, wenn nun dieser wait-Befehl ausgeführt wird?

Mir ist klar, dass der Thread dann in eine Art Schlafmodus versetzt wird. Aber wie geht es nach dem wait weiter? Welche Befehle werden danach ausgeführt? Wird der Thread komplett aus der synchronized-Methode rausgeworfen? Muss er dann nach einem notify wieder von vorne anfangen? Also darauf hoffen, dass ihn Java wieder in die synchronized-Methode reinlässt?
 

eRaaaa

Top Contributor
Angenommen, ich habe eine synchronized-Methode mit einem wait darin. Was passiert, wenn nun dieser wait-Befehl ausgeführt wird?
der Thread der den Monitor besitzt legt sich schlafen und gibt den Monitor an einen anderen Thread weiter.

Aber wie geht es nach dem wait weiter? Welche Befehle werden danach ausgeführt? Wird der Thread komplett aus der synchronized-Methode rausgeworfen? Muss er dann nach einem notify wieder von vorne anfangen? Also darauf hoffen, dass ihn Java wieder in die synchronized-Methode reinlässt?

Nein, er macht da weiter wo er aufgehört hat.
Guarded Blocks (The Java™ Tutorials > Essential Classes > Concurrency)
 

minzee

Bekanntes Mitglied
Danke :)

Hab das jetzt geschafft, mir das Verhalten auch anzusehen:
Java:
// so ein Thread weiterarbeitet, sobald er mit wait aufgeweckt wurde
class R
{
   public synchronized void mWait()
   {
      try
      {
         System.out.println("wait a");
         wait();
         System.out.println("wait b"); // bis hierher kommen die Threads nie
      }
      catch(InterruptedException e)
      {
         System.out.println("wait interrupt ");
      }
   }
   public synchronized void mNotify()
   {
      System.out.println("notify");
      notify(); // einen Thread aufwecken
   }
}
class TWait extends Thread
{
   private R r;
   public TWait(R r)
   {
      this.r = r;
   }
   public void run()
   {
      r.mWait(); // dieser Thread wird gleich blockiert
   }
}
class TNotify extends Thread
{
   private R r;
   public TNotify(R r)
   {
      this.r = r;
   }
   public void run()
   {
      r.mNotify(); // weckt den anderen blockierten Thread auf
   }
}
public class Main
{
   public static void main(String[] args)
   {
      R r = new R();
      TWait tWait = new TWait(r);
      TNotify tNotify = new TNotify(r);
      tWait.start();
      try
      {
         Thread.sleep(1000);
      }
      catch(InterruptedException e)
      {
         System.out.println("sleep interrupt");
      }
      tNotify.start();
   }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S bin zu blöd für threads - wait, notify, synchronized Java Basics - Anfänger-Themen 11
R wait() in synchronized - Block oder nicht? Java Basics - Anfänger-Themen 4
frager2345 Thread - Methoden synchronized deklarieren Java Basics - Anfänger-Themen 10
berserkerdq2 Wo finde ich in der Java Api die Notation zu Threads bezüglich Synchronized? Java Basics - Anfänger-Themen 14
A Thread - Synchronized Java Basics - Anfänger-Themen 10
berserkerdq2 Findet eine parallele Verarbeitung in Java bei Threads erst statt, wenn man die Methoden auch synchronized? Und wie sieht bei Conditions aus? Java Basics - Anfänger-Themen 8
X Threads Zwei Threads, aber doppelte Ausgabe verhindern (synchronized) Java Basics - Anfänger-Themen 54
O synchronized Java Basics - Anfänger-Themen 39
O synchronized difference Java Basics - Anfänger-Themen 5
E Synchronisierte Methoden vs. Synchronized(lockObject) Block Java Basics - Anfänger-Themen 7
T Was bringt das synchronized bei der Methode? Java Basics - Anfänger-Themen 12
temi Synchronized(Monitor) Java Basics - Anfänger-Themen 2
Z Threads Threads - Zugriff auf Ressourcen ohne(Lock, Synchronized) Java Basics - Anfänger-Themen 2
Shams Synchronized-Schlüsselwort bei Inkrementierung einer statischen Variable Java Basics - Anfänger-Themen 13
V Parameter in synchronized-Blöcken verstehen Java Basics - Anfänger-Themen 2
N Threads Probleme mit synchronized Java Basics - Anfänger-Themen 9
B synchronized threads Java Basics - Anfänger-Themen 17
J Threads Synchronized Java Basics - Anfänger-Themen 6
U synchronized / lock Java Basics - Anfänger-Themen 8
P Arraylist synchronized? Java Basics - Anfänger-Themen 6
X3TitanCore Methoden synchronized bei einer Methode Java Basics - Anfänger-Themen 2
P synchronized methoden Java Basics - Anfänger-Themen 3
B warum schließt synchronized andere threads nicht aus? Java Basics - Anfänger-Themen 7
M Synchronized klappt nicht Java Basics - Anfänger-Themen 11
E synchronized Methoden Java Basics - Anfänger-Themen 3
M synchronized( ref ) Java Basics - Anfänger-Themen 3
I Synchronized Threads Java Basics - Anfänger-Themen 4
R Problem: Threads Synchronized machen Java Basics - Anfänger-Themen 5
M OOP Synchronized Methoden, zugriff aus Threads Java Basics - Anfänger-Themen 4
X Threads und synchronized - Verständnisproblem Java Basics - Anfänger-Themen 3
M Kleines Problem mit Threads (synchronized) Java Basics - Anfänger-Themen 3
S Fragen zu synchronized + Singleton! Java Basics - Anfänger-Themen 10
J simple Frage zu synchronized Java Basics - Anfänger-Themen 4
S Threads: synchronized mach nicht was es soll? Java Basics - Anfänger-Themen 6
L Threads und synchronized Java Basics - Anfänger-Themen 8
X Synchronized Zugriff ArrayList<E> Java Basics - Anfänger-Themen 6
G synchronized Java Basics - Anfänger-Themen 5
M synchronized variables? Java Basics - Anfänger-Themen 8
B Verständnissfrage synchronized Java Basics - Anfänger-Themen 2
S Warum wirkt hier synchronized nicht? Java Basics - Anfänger-Themen 9
C Trotz "synchronized" unerwartete Ausgabe Java Basics - Anfänger-Themen 2
E Synchronized - Methoden in verschied. Klassen Java Basics - Anfänger-Themen 3
C synchronized Java Basics - Anfänger-Themen 2
J Fragen zu Synchronized Java Basics - Anfänger-Themen 6
T synchronized HashMap Java Basics - Anfänger-Themen 7
L Problem mit synchronized und String Java Basics - Anfänger-Themen 2
A Problem mit Threads und synchronized Java Basics - Anfänger-Themen 3
B Was bedeutet synchronized? Java Basics - Anfänger-Themen 8
I Exception bei Button mit wait() und notifyAll() Java Basics - Anfänger-Themen 3
O Threads - Synchronize(), join(), wait(), notify(), yield() Java Basics - Anfänger-Themen 6
ralfb1105 Frage zu Thread Synchronisation mit wait() und notify() Java Basics - Anfänger-Themen 3
M notify und wait Java Basics - Anfänger-Themen 1
D Stack-Objekt - LIFO - wait(); notify(); Java Basics - Anfänger-Themen 0
D Probleme mit wait(), notify() Java Basics - Anfänger-Themen 0
M wait/notify bei Socket Java Basics - Anfänger-Themen 4
BlueFox Greenfoot wait() Java Basics - Anfänger-Themen 10
Luk10 Monitor: wait() und notify() Java Basics - Anfänger-Themen 8
A wait() problem Java Basics - Anfänger-Themen 3
G wait()-Mehtode Java Basics - Anfänger-Themen 13
S Threads: wait() und notify() Java Basics - Anfänger-Themen 11
T meinThread.wait(); wirft immer Exeption & hat kein Effekt Java Basics - Anfänger-Themen 15
B Problem: wait() -> notify() Java Basics - Anfänger-Themen 4
M Threads, wait() und notify() Java Basics - Anfänger-Themen 10
G Threads steuern mit wait und notify Java Basics - Anfänger-Themen 2
M wait() sleep() geht nicht wirklich Java Basics - Anfänger-Themen 3
P wait und notify oder wie soll ich es lösen Java Basics - Anfänger-Themen 2
vogella *Gelöst *Im Programm warten (wait()) Java Basics - Anfänger-Themen 2
D Wait und Image Java Basics - Anfänger-Themen 3
U wait Java Basics - Anfänger-Themen 2
O Problem bei der Synchronisierung von Threads (wait&notif Java Basics - Anfänger-Themen 4
C java.util.Timer und wait() oder so was Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben