ホームページ > Java > &#&チュートリアル > 複数のスレッドの完了ステータスを効率的に判断するにはどうすればよいですか?

複数のスレッドの完了ステータスを効率的に判断するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-28 03:31:10
オリジナル
370 人が閲覧しました

How Can I Efficiently Determine the Completion Status of Multiple Threads?

複数のスレッドでのスレッドの完了を確認する方法

複数のスレッドを同時に実行する場合、それらの完了ステータスを確認することが重要になります。この記事では、これを実現するためのさまざまな方法を検討します。

1. Thread.join(): Blocking Wait

Thread.join() メソッドを使用すると、特定のスレッドが実行を完了するまでメイン スレッドをブロックできます。このアプローチは単純ではありますが、アプリケーション全体の応答性を妨げる可能性があります。

2. Thread.isAlive(): ポーリング チェック

Thread.isAlive() は、スレッドがまだ実行中かどうかを定期的に確認します。ただし、このアプローチは非効率性とリソース消費の可能性があるため、一般的に推奨されません。

3. UncaughtExceptionHandler:

型破りなアプローチには、キャッチされない例外ハンドラーのセットアップが含まれます。スレッドが完了すると、例外をスローしてオブジェクト内のハンドラーをトリガーするようにプログラムできます。

4.ロックとシンクロナイザー:

ロックまたはシンクロナイザーを利用すると、スレッドの実行と完了を管理するためのより同期されたメカニズムを提供できます。

5.リスナーベースの通知:

より洗練されたソリューションには、リスナー インターフェイスを作成し、NotifyingThread を拡張するクラスを実装することが含まれます。これらのスレッドは完了時に自動的にリスナーに通知し、メイン スレッドが通知を受信して​​それに応じて応答できるようにします。

リスナーベースの通知の実装:

このアプローチを実装するには、まず始めます。リスナー インターフェイスを定義します:

public interface ThreadCompleteListener {
    void notifyOfThreadComplete(final Thread thread);
}
ログイン後にコピー

次に、抽象クラス NotifyingThread を作成します。スレッド:

public abstract class NotifyingThread extends Thread {
    private final Set<ThreadCompleteListener> listeners
                   = new CopyOnWriteArraySet<>();
}
ログイン後にコピー

特定のスレッドでは run() の代わりに doRun() メソッドを実装する必要があります。完了すると、登録されているリスナーに通知します。

最後に、スレッドを開始するメイン クラスを変更して ThreadCompleteListener を実装します。各スレッドを作成したら、それをリスナー リストに追加します。

NotifyingThread thread1 = new OneOfYourThreads();
thread1.addListener(this); // Add main class as a listener
thread1.start();           // Start the thread
ログイン後にコピー

スレッドが完了するかクラッシュするたびに、notifyOfThreadComplete メソッドが呼び出され、完了したスレッド インスタンスが提供されます。

注: 新しいスレッドを作成するには、一般に Thread を拡張するよりも Runnable を実装することが推奨されます。

以上が複数のスレッドの完了ステータスを効率的に判断するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート