Sleep() für einen einzelnen Thread in einer Threading-Umgebung verwenden
Beim Arbeiten mit mehreren Threads ist es wichtig, eine Unterbrechung der Ausführung zu vermeiden aller Threads, wenn nur ein einzelner Thread warten muss. Leider kann der Aufruf von Thread.sleep() für einen Thread unbeabsichtigt auch die Ausführung anderer Threads beeinträchtigen.
In diesem Fall verwendet das Code-Snippet JFrame aus javax.swing.* und java.awt.* Pakete. Der Haupt-Thread verarbeitet Benutzereingaben für das Tic-Tac-Toe-Board, während ein sekundärer Thread für die Reaktion der KI verantwortlich ist. Um eine Verzögerung zu implementieren, bevor die KI an der Reihe ist, versucht der Code, ait.sleep(1000) zu verwenden. Allerdings werden beide Threads unerwartet für 1 Sekunde angehalten.
Der Grund für dieses Verhalten liegt in der Tatsache, dass Swing-GUIs in einem eigenen Thread getrennt vom Haupt-Thread erstellt werden. Wenn Thread.sleep() im Event Dispatch Thread (EDT) aufgerufen wird, wird die Verarbeitung aller Swing-Ereignisse angehalten, einschließlich derjenigen, die für Benutzerinteraktionen und GUI-Updates erforderlich sind. Infolgedessen scheint die gesamte GUI eingefroren zu sein, bis der Aufruf von sleep() abgeschlossen ist.
Lösung
Um eine Unterbrechung der gesamten Ausführung zu vermeiden, ist es wichtig, alternative Methoden zu verwenden zur Umsetzung von Verzögerungen beim EDT. Erwägen Sie die folgenden Optionen:
<code class="java">int delay = 1000; Timer timer = new Timer(delay, new AbstractAction() { @Override public void actionPerformed(ActionEvent ae) { // Action to be performed after the delay } }); timer.start();</code>
Wenn Sie Swing-Komponenten nicht bearbeiten müssen, können Sie einen separaten Thread erstellen und Thread.sleep() verwenden diesen Thread, ohne andere Threads oder die GUI zu beeinträchtigen.
Das obige ist der detaillierte Inhalt vonWarum friert der Aufruf von Thread.sleep() in einem einzelnen Thread die gesamte Swing-GUI ein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!