Thread wacht nicht auf

qwert

Aktives Mitglied
Hallo,

folgender Codeausschnitt:
Java:
try {
  System.out.println("schlafen");
  Thread.sleep(Konstanten.SYNCHRONIZER_SLEEP);
  System.out.println("aufwachen");
} catch(InterruptedException err) {
   err.printStackTrace();
}
Ausgabe:
Code:
schlafen

Das tatsächliche Programm ist äußerst umfangreich, deswegen kann ich hier kein lauffähiges isoliertes Beispiel posten.
Aber welche Möglichkeiten gibt es, dass der Thread nicht aufwacht? Ich muss zugeben, dass ich "vorsichtshalber" viele "synchronized" verwendet habe :D. Kann man daraus einen Fall konstruieren, der obiges Verhalten erzeugt?
Mir fällt leider nichts ein :(.

Vielen Dank! :)

Edit: Die Variable hat einen Wert von "500".
 
Zuletzt bearbeitet von einem Moderator:

qwert

Aktives Mitglied
Zu faul bin ich garantiert nicht, nur kann ich schlecht 1850 Zeilen Quelltext, aufgeteilt auf 17 Klassen posten, denn das würde sich wohl niemand anschauen. Zurechtstutzen geht auch sehr sehr schlecht, denn meine Codestruktur verstehe ich selbst nicht mehr aufgrund mehrerer Threads, Singletons, Observern und ähnlichem.

Also gibt es nicht ein paar Möglichkeiten, die man bei so einem Problem auf jeden Fall mal abchecken sollte?

EDIT: Zu aller erst sollte man mal mehr Geduld haben, denn nach einigen Sekunden wacht der Thread doch auf. Obwohl die CPU-Auslastung sehr gering ist, dauert es aber wesentlich länger als die angegebenen 500ms, auch wenn mir bekannt ist, dass die Angabe eine Mindestdauer ist.
 
Zuletzt bearbeitet:

arilou

Bekanntes Mitglied
Ist sicher, dass der Thread nicht aufwacht, oder erscheint nur die Bildschirmausgabe (
Code:
"aufwachen"
) nicht sofort? Der out-Stream ist nämlich gepuffert, und muss nicht sofort erscheinen.
Erweiter' mal den try-Block um
Java:
System.out.flush();

denn meine Codestruktur verstehe ich selbst nicht mehr aufgrund mehrerer Threads, Singletons, Observern und ähnlichem.
Das ist schon mal eine ganz schlechte Ausgangslage...
es [dauert] aber wesentlich länger als die angegebenen 500ms, auch wenn mir bekannt ist, dass die Angabe eine Mindestdauer ist.
Eigentlich ist es v.a. eine Höchstdauer, der Thread kann bereits früher (z.B. per notifyAll() ) geweckt werden.
 
Zuletzt bearbeitet:

chalkbag

Bekanntes Mitglied
Eigentlich ist es v.a. eine Höchstdauer, der Thread kann bereits früher (z.B. per notifyAll() ) geweckt werden.

Hi, das wäre mir neu. Ich glaube du meinst das wait bzw. yield, da greift ein Notify. Beim sleep bekommst du den Thread nicht ohne weiters aufgeweckt.
Auch ist es nach meiner Meinung eine Minimaldauer. Es gibt zwar Abweichung aufgrund Systemzeit etc. aber es wird meistens mehr als weniger werden, da der Thread zwar nach den 500ms wieder auf State ready steht, aber deswegen trotzdem nicht sofort die CPU bekommen muss (besonders wenn gerade andere Threads laufen).

Api- Auszug sleep

Causes the currently executing thread to sleep (temporarily cease execution) for the specified number of milliseconds, subject to the precision and accuracy of system timers and schedulers. The thread does not lose ownership of any monitors.


Api- Auszug notifyall

Wakes up all threads that are waiting on this object's monitor. A thread waits on an object's monitor by calling one of the wait methods.

The awakened threads will not be able to proceed until the current thread relinquishes the lock on this object. The awakened threads will compete in the usual manner with any other threads that might be actively competing to synchronize on this object; for example, the awakened threads enjoy no reliable privilege or disadvantage in being the next thread to lock this object.

This method should only be called by a thread that is the owner of this object's monitor. See the notify method for a description of the ways in which a thread can become the owner of a monitor.
 
Zuletzt bearbeitet:

arilou

Bekanntes Mitglied
Mein Prof im Studium meinte, man müsse bei Thread.sleep immer damit rechnen, dass auch vorzeitig eine InterruptedException kommen könne; ich weis aber nicht mehr, ob er das auf bestimmte Fälle eingeschränkt hat. Auf jeden Fall ist es keine schlechte Idee, stets so etwas zu bauen:
Java:
long waitTill = System.currentTimeMillis() + ms_to_wait ;
do{
  long ms_remaining = waitTill - System.currentTimeMillis() ;
  try{
    Thread.sleep( ms_remaining ); }
  catch( InterruptedException iE ) {
    ; }
} while( System.currentTimeMillis() < waitTill );

Evtl. wird's noch stabiler, die InterruptedException durch Throwable auszutauschen. Falls 'ne Scherznase auf die Idee kommt, ms_to_wait negativ zu wählen, oder oder oder.
 
Zuletzt bearbeitet:

chalkbag

Bekanntes Mitglied
@arilou

Jetzt verstehe ich. Gemeint war wahrscheinlich, wenn der Thread frühzeitig abgeschossen/verdrängt wird (systemseitig)?
Danke für die Aufklärung :)
 

arilou

Bekanntes Mitglied
@chalkbag: Ich erinner' mich leider nicht mehr genau, was der Prof genau gesagt hat.
Ich denke eher, dass evtl. manche JVM bei .notifyAll nicht sehr präzise ist, welche Threads sie "weckt" - und eben manche JVM einfach alle weckt, die nicht durch einen synchronized-Lock geblockt sind.
Oder dass manche JVM Probleme hat, wenn mehrere Threads gleichzeitig Thread.sleep aufgerufen haben, und wenn der erste aufwachen will, einfach alle weckt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
J Thread wait() Allgemeine Java-Themen 2
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
T Wait/Notify() bei Thread Allgemeine Java-Themen 6
J Exception in thread "main" java.lang.NoClassDefFoundError Allgemeine Java-Themen 4
M Exception in thread "AWT-EventQueue-0" Allgemeine Java-Themen 6
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
V anstatt thread.join() einfach while schleife? Allgemeine Java-Themen 8
B Mausbewegung im Thread erkennen (hoch/runter) Allgemeine Java-Themen 6
G Linux/C++/Pthreads auf JVM zugreifen, thread safe? Allgemeine Java-Themen 10
K Threads Probleme mit Thread Allgemeine Java-Themen 13
K Threads Thread überprüfen Allgemeine Java-Themen 3
Z Threads Thread für einen Client Allgemeine Java-Themen 9
M Thread JavaFish Allgemeine Java-Themen 10
G Thread.sleep Allgemeine Java-Themen 12
M Threads Viele Aufrufe aus Thread, komisches Verhalten Allgemeine Java-Themen 8
B Threads Main Thread warten auf abgebrochen Task warten lassen Allgemeine Java-Themen 25
K Timer Thread Allgemeine Java-Themen 8
M Methoden Static Methoden und Thread??? Allgemeine Java-Themen 4
N java.lang.IllegalMonitorStateException: object not locked by thread before notify() Allgemeine Java-Themen 2
C Mehothode in anderenm Thread aufrufen Allgemeine Java-Themen 10
R Thread läuft nicht?! Allgemeine Java-Themen 7
R ThreadPool - vorhandene thread liste überprüfen bzw. aufräumen Allgemeine Java-Themen 3
J Anderem Thread Variable mitgeben Allgemeine Java-Themen 2
C Argument an einen Thread übergeben Allgemeine Java-Themen 4
S java.util.ConcurrentModificationException - aber nur ein Thread Allgemeine Java-Themen 3
G JUnit Test Methoden in anderen Thread verlagern Allgemeine Java-Themen 4
P Java Probleme - java.lang.Thread.run(Unkown Source) Allgemeine Java-Themen 10
L Im Thread auf Eingaben warten Allgemeine Java-Themen 3
P aus Thread auf Form zugreifen Allgemeine Java-Themen 9
C Threads Thread blockieren Allgemeine Java-Themen 4
K Threads Thread für Sleep Allgemeine Java-Themen 6
H Threads Thread stirbt aber Objekte in ihm leben weiter?! Allgemeine Java-Themen 9
K Threads Thread aktualisiert Progressbar nicht Allgemeine Java-Themen 4
D Methoden Thread Schleife Status Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben