実行全体をフリーズさせずに単一スレッドに Sleep() を使用する
マルチスレッドの基本的な側面の 1 つは、スレッドを一時停止する機能です。他のスレッドが実行を継続できるようにしながら、スレッドを実行します。 Java では、sleep() がこの目的に一般的に使用されます。ただし、GUI アプリケーションで sleep() を使用すると、意図しない結果が生じる可能性があります。
問題:
GUI イベントを処理するスレッドで sleep() が呼び出された場合、他のすべてのスレッドを含むアプリケーション全体がフリーズします。これは、イベント ディスパッチ スレッド (EDT) がすべての GUI 更新を処理する責任があり、sleep() がそれをブロックするために発生します。
説明:
Swing GUIメイン アプリケーションとは別のスレッドである EDT 上で作成および操作されます。 EDT で sleep() が呼び出されると、その実行が停止され、事実上 GUI の更新が防止されます。その結果、他のすべてのスレッドも強制的に待機することになり、アプリケーションがフリーズしたように見えます。
解決策:
アプリケーションのフリーズを回避するには、いくつかの代替方法があります。 EDT に影響を与えずに単一のスレッドを一時停止するメソッド:
要約すると、アプリケーションがフリーズする可能性があるため、EDT では sleep() を使用すべきではありません。代わりに、Swing Timer、Swing Worker、または TimerTask を使用して、GUI の更新に影響を与えることなく単一のスレッドを一時停止します。
以上がJava Swing アプリケーションのイベントディスパッチスレッドで `sleep()` を使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。