単一スレッドでの sleep() の使用
Java では、スレッドの同期を処理するために wait() と sleep() が使用されます。ただし、他のスレッドを実行しているときに単一のスレッドで sleep() を利用しようとすると、問題が発生する可能性があります。
問題:
1 つのスレッドで sleep() を呼び出すときの場合、両方のスレッドが指定された期間実行を一時停止しているように見えます。この動作はなぜ発生しますか?
答え:
Swing GUI を使用する場合、メイン スレッドや他のスレッドとは異なる固有のスレッドがその作成を担当します。このスレッドはイベント ディスパッチ スレッド (EDT) として知られています。 EDT で sleep() が呼び出された場合、呼び出しが完了するまで実行が停止します。
GUI イベント処理が EDT で発生するため、このスレッドでのスリープ操作はイベント処理を一時停止し、スリープまで UI がフリーズしたように見えます。
解決策:
EDT または sleep() が意図しない実行ブロックを引き起こすスレッドで Thread.sleep() を使用するのは避けてください。あるいは、次のオプションを検討してください。
注:
Java 1.6 以降の場合、Swing Timer と Swing Worker は、EDT でのアクションを遅延させるための推奨オプションです。以前の Java バージョンでは、TimerTask または Thread を SwingUtilities/EventQueue#invokeXX ブロックと組み合わせて使用して、UI の応答性を確保できます。
以上がイベントディスパッチスレッドで `sleep()` を呼び出すと GUI がフリーズするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。