Sleep() für einen einzelnen Thread verwenden
In Java werden wait() und sleep() für die Thread-Synchronisierung verwendet. Wenn Sie jedoch versuchen, „sleep()“ für einen einzelnen Thread zu verwenden, während andere ausgeführt werden, kann ein Problem auftreten.
Problem:
Beim Aufrufen von „sleep()“ für einen Thread , scheinen beide Threads die Ausführung für die angegebene Dauer anzuhalten. Warum tritt dieses Verhalten auf?
Antwort:
Bei der Arbeit mit Swing-GUIs ist ein eindeutiger Thread, der sich vom Haupt- und anderen Threads unterscheidet, für dessen Erstellung verantwortlich. Dieser Thread wird als Event Dispatch Thread (EDT) bezeichnet. Wenn sleep() auf EDT aufgerufen wird, stoppt es die Ausführung, bis der Aufruf abgeschlossen ist.
Da die GUI-Ereignisverarbeitung auf EDT erfolgt, pausiert jede Sleep-Operation in diesem Thread die Ereignisverarbeitung, was dazu führt, dass die Benutzeroberfläche bis zum Ruhezustand eingefroren erscheint () schließt ab.
Lösung:
Vermeiden Sie die Verwendung von Thread.sleep() auf EDT oder Threads, bei denen sleep() zu einer unbeabsichtigten Blockierung der Ausführung führen würde. Alternativ können Sie die folgenden Optionen in Betracht ziehen:
Hinweis:
Für Java 1.6 oder höher sind Swing Timer und Swing Worker bevorzugte Optionen zum Verzögern von Aktionen auf EDT. Für frühere Java-Versionen kann TimerTask oder Thread in Verbindung mit dem SwingUtilities/EventQueue#invokeXX-Block verwendet werden, um die Reaktionsfähigkeit der Benutzeroberfläche sicherzustellen.
Das obige ist der detaillierte Inhalt vonWarum friert der Aufruf von „sleep()' im Event-Dispatch-Thread die GUI ein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!