Wait/Notify() bei Thread

tanechka

Bekanntes Mitglied
Hallo,

ich habe folgendes Code:
Java:
package mock;

public class TestThread {
	public static void main(String[] args) throws InterruptedException {
		Job thread = new Job();
        thread.start();
        
        synchronized (thread) {

        	System.out.println("synchronized block "+Thread.currentThread().getName());
            thread.wait();
        }
      
        System.out.println(thread.getNumber());
	}
}

class Job extends Thread {
	private Integer number = 0;

	public void run() {
		System.out.println("run "+Thread.currentThread().getName());
		for (int i = 1; i < 1000000; i++) {
			number++;
		}
	}

	public Integer getNumber() {
		return number;
	}
}
Ich habe Schwierigkeiten den Output nachzuvollziehen. Ich verstehe es so: Ich erstelle einen Thread und starte den, dann über synchronized block wird dieser Thread angehalten(bis irgendwo ein notify() Method aufgerufen wird). Wieso habe ich die Ausgabe 999999, obwohl ich den Thread angehalten habe?

Vielen Dank im Voraus
 
Zuletzt bearbeitet von einem Moderator:
Die Ausgabe 999999 bedeutet, dass der Thread run() durchgeführt hat. Ich habe mehrmals ausprobiert, immer dieselbe Ausgabe.

Ja das ist richtig, aber die Run-Methode ist von deinem Objekt "thread" .
Den du mit thread.start() angewiesen hast das zu berechnen. SEPARAT
Nach der Brechnung ist der Thread fertig somit terminiert er sich, dein Wait hat keine einfluss auf die Berechnung.
Es gilt lediglich für den synchronized Block, aber in dem passiert ja nichts. Es ist ein wenig kompliziert ^^

Schieb mal dein thread.start() in den Block weiter unter wait(), dann wird nichts passieren und das Programm hängt im DeadLock fest ;)
 

tanechka

Bekanntes Mitglied
du meinst so:

Code:
synchronized (thread) {
			thread.start();
			System.out.println("synchronized block "
					+ Thread.currentThread().getName());
			thread.wait();
		}
es hat sich nichts geändert. Ich habe es mit dem wait() so verstanden, dass diese Methode zum Anhalten vom Thread dient. Wait() wird auch immer mit notify() oder notifyAll() benutzt. In meinem Beispiel ist also der Thread fertig mit dem run() bevor ich ihn anhalten, richtig?
 
Java:
synchronized (thread) {
			
			System.out.println("synchronized block "
					+ Thread.currentThread().getName());
			thread.wait();
thread.start();
		}
So war das gemeint ;)

Nein, wait() benutzt du um irrgendetwas threadsicher zu machen. Schreib dir deine eigene pause-Methode oder probier mal Thread.suspend()/Thread.resume() aus.
 

adalbert

Mitglied
Hallo tanechka,

du legst deinen Main-Thread in Zeile 12 "schlafen" oder besser warten bis er durch ein notify() (oder notifyAll()) auf dem thread-Objekt (im folgenden nenne ich den mal Job-Thread) geweckt wird. Wenn ich dich richtig verstehe ist deine Frage, wieso der Main-Thread wieder aufwacht, wenn der Job-Thread, der deine Variable hochzählt, fertig ist, obwohl du kein notify() oder notifyAll() auf dem Job-Threadaufrufst.

Thread (Java Platform SE 7 )

Wenn dein Thread mit dem hochzählen fertig ist, stirbt dieser undes wird automatisch die notifyAll() auf dem Thread gerufen.

As a thread terminates the this.notifyAll method is invoked. It is recommended that applications not use wait, notify, or notifyAll on Thread instances.

Grüße,
Adalbert
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Thread wait, notify Allgemeine Java-Themen 4
mrbig2017 Threads wait wird nicht durch notify beendet! Allgemeine Java-Themen 3
G Threads Threadprogrammierung wait() und notify() Allgemeine Java-Themen 4
B Threads Barrier mit wait()/notify() aber nicht alle Prozesse terminieren Allgemeine Java-Themen 2
P Threads abwechseln lassen mit wait() und notify() Allgemeine Java-Themen 2
M Java Threads - Wait Notify - Verständnisproblem Allgemeine Java-Themen 5
K Threads wait() und notify() Allgemeine Java-Themen 8
Q Frage zu Threads ( notify() wait() ) Allgemeine Java-Themen 6
H wait() and notify() mit mehreren Prozessen Allgemeine Java-Themen 14
A thread1 stoppt thread2 mit wait() und notify() ? Allgemeine Java-Themen 3
K Multithreading: Service(Task), wait und continue Allgemeine Java-Themen 21
J Thread wait() Allgemeine Java-Themen 2
J Swing Cursor.WAIT funktioniert nicht nach JFileChooser Allgemeine Java-Themen 1
A System freezes when trying to run external command from Java with wait for Allgemeine Java-Themen 3
T Threadsicheres wait() [lock erst mit wait() abgeben] Allgemeine Java-Themen 31
J synchronized block mit this und wait() Allgemeine Java-Themen 5
G Process.wait() auf Folgeprozesse mitwarten Allgemeine Java-Themen 29
G Thread wait() auf Nicht-Thread Klasse Allgemeine Java-Themen 5
M Thread mit wait anhalten, wie weiterlaufenlassen? Allgemeine Java-Themen 3
M wait in Thread einschieben? Allgemeine Java-Themen 4
C p.wait() bremst aus Allgemeine Java-Themen 4
N java.lang.IllegalMonitorStateException: object not locked by thread before notify() Allgemeine Java-Themen 2
B notify() - was passiert danach genau? Allgemeine Java-Themen 8
L Producer/Consumer Thread mit notify auf File Allgemeine Java-Themen 5
G notify() was wird verständigt Allgemeine Java-Themen 5
K synchronized und notify / notifyAll Allgemeine Java-Themen 8
G MVC-Konzept - effizienz beim "notify" Allgemeine Java-Themen 2
M Unterschied notify() und notifyAll() Allgemeine Java-Themen 1
S Unterschied zwischen notify() und notifyAll() Allgemeine Java-Themen 2
R 11 GB File lesen ohne zu extrahieren Filedaten Bereich für Bereich adressieren dann mit Multi-Thread id die DB importieren Allgemeine Java-Themen 3
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
smarterToby Wie stoppe ich diesen Thread Allgemeine Java-Themen 4
A Thread.sleep Problem Allgemeine Java-Themen 2
J Thread started nur einmal Allgemeine Java-Themen 19
W Server-Thread schreibt nicht alle Dateien Allgemeine Java-Themen 6
OnDemand Logfile pro User / Thread Allgemeine Java-Themen 7
OnDemand Thread / Service abbrechen Allgemeine Java-Themen 3
Thallius Ist meine static Helper Class Thread save? Allgemeine Java-Themen 9
P Swing Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: npoints > xpoints.length || npoints > ypoints.length Allgemeine Java-Themen 5
B Thread.sleep() in EJB Container wie lösen? Allgemeine Java-Themen 11
S Ist das Neuzuweisen von Feldern atomic und damit Thread-Safe? Allgemeine Java-Themen 2
S Exception in thread "main" java.lang.NullPointerException at FamilienApp.main(FamilienApp.java:15) Allgemeine Java-Themen 1
J Einen Thread in einer Schleife Allgemeine Java-Themen 2
E HILFE !! Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/io/FileUtils Allgemeine Java-Themen 4
Flynn Thread-Problem... Allgemeine Java-Themen 2
G Thread-Programmierung Allgemeine Java-Themen 5
S Datei wird nicht gefunden Thread.currentThread().getContextClassLoader().getResourceAsStream() Allgemeine Java-Themen 1
G Beendet sich der Thread selbst?! Allgemeine Java-Themen 3
mrbig2017 Sleep wird ignoriert und der Thread wartet nicht Allgemeine Java-Themen 1
S Thread beenden Allgemeine Java-Themen 9
M Array aus Thread Objekten erstellen Allgemeine Java-Themen 2
Aruetiise Swing JOptionPane ohne denn Thread zu pausieren Allgemeine Java-Themen 1
M Nanosekunden-Pause innerhalb einen Thread-Loops Allgemeine Java-Themen 3
E Thread Exception Allgemeine Java-Themen 6
javaerd Binomialkoeffizient ausrechnen, Exception in thread "main" java.lang.StackOverflowError Allgemeine Java-Themen 6
T Merkwürdiges Thread-Verhalten Allgemeine Java-Themen 6
K Thread Problem Allgemeine Java-Themen 6
W Thread sleep 30 sekunden - wenn keine Antwort bis dahin neu senden Allgemeine Java-Themen 2
H Thread bleibt stehen bei jar in jar Allgemeine Java-Themen 1
J Threads HTTP Request (Thread) dauert lange - in Android Allgemeine Java-Themen 3
F CPU Last eines Thread ausfindig machen Allgemeine Java-Themen 0
V Compiler-Fehler Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 125, Size: 125 Allgemeine Java-Themen 11
Tausendsassa Threads Einen Thread sich selbst schließen lassen Allgemeine Java-Themen 17
P Threads BufferedImage, Thread Concurrency Allgemeine Java-Themen 1
M Klasse in separaten Thread ausführen.Wie genau? Allgemeine Java-Themen 2
llabusch Thread blockiert Dialog Allgemeine Java-Themen 1
V Thread.sleep und InterruptedException? Allgemeine Java-Themen 1
G Thread nicht von GC zerstört Allgemeine Java-Themen 6
J Wie erschaffe ich einen sicheren Datenaustausch zwischen Thread und Nicht-Threads Allgemeine Java-Themen 8
Sogomn Thread blocken bis Taste gedrückt Allgemeine Java-Themen 5
T Starten vom Thread Allgemeine Java-Themen 3
J Exception in thread "main" java.lang.NoClassDefFoundError Allgemeine Java-Themen 4
M Exception in thread "AWT-EventQueue-0" Allgemeine Java-Themen 6
Q Thread wacht nicht auf Allgemeine Java-Themen 7
T Fragen zum Thread-Thema Allgemeine Java-Themen 4
T Threads Input/Output im Thread - Datei ohne Inhalt Allgemeine Java-Themen 1
T Fragen zum Thread-Thema Allgemeine Java-Themen 9
C Threads Variablen in einem Thread Aktualisieren Allgemeine Java-Themen 17
U Thread beenden Allgemeine Java-Themen 3
W Threads Mit Thread und Runtime externe Programme öffnen Allgemeine Java-Themen 0
N Thread interrupt Status debuggen Allgemeine Java-Themen 6
A Thread: Code paralell ausführen in mehreren Instanzen Allgemeine Java-Themen 1
E Threads linkedlist/multi-thread problem Allgemeine Java-Themen 3
B Erkennen, wann Prozess beendet ist, dann Thread beenden. Allgemeine Java-Themen 6
A Thread Fehler absichtlich provozieren Allgemeine Java-Themen 3
B Threads Java Thread kommunizieren Allgemeine Java-Themen 12
N Thread Sicherheit im komplexen Datenmodell Allgemeine Java-Themen 7
K Thread richtig benutzen Allgemeine Java-Themen 3
K Exception in thread "AWT-EventQueue-1" Allgemeine Java-Themen 2
vandread Problem bei kleiner Thread-Übung Allgemeine Java-Themen 2
G Thread erzeugt nicht plausible NullPointerException Allgemeine Java-Themen 7
H Netbeans Warning bei Thread.sleep in Schleife Allgemeine Java-Themen 4
P [Thread] Scheint nicht Sequenziell zu Arbeiten Allgemeine Java-Themen 9
A eine test thread.join() frage Allgemeine Java-Themen 2
tuttle64 Verständnisprobleme mit Thread Locks Allgemeine Java-Themen 4
G Threads Thread bei Datenabfrage Allgemeine Java-Themen 3
S Thread anhalten per Button ? Allgemeine Java-Themen 3
E Thread Programmierung Allgemeine Java-Themen 2
S Threads ServerSocket-Thread soll schlafen, bis er gebraucht wird Allgemeine Java-Themen 2
V Thread schneller stoppen Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben