ホームページ > Java > &#&チュートリアル > マルチスレッドプログラミングで子スレッドの完了ステータスを効果的に判断するにはどうすればよいですか?

マルチスレッドプログラミングで子スレッドの完了ステータスを効果的に判断するにはどうすればよいですか?

DDD
リリース: 2024-12-05 17:15:11
オリジナル
912 人が閲覧しました

How Can I Effectively Determine the Completion Status of Child Threads in Multithreaded Programming?

スレッドの完了ステータスの確認

マルチスレッド プログラミングでは、子スレッドの実行がいつ終了したかを知ることが重要です。この質問では、スレッドの完了ステータスを監視するためのさまざまなアプローチを検討します。

Thread.join():
メイン スレッドのこのメソッドは、すべての子スレッドが完了するまで実行をブロックします。これは同期完了を保証しますが、ブロック的なアプローチです。

Thread.isAlive():
Polling Thread.isAlive() を使用すると、スレッドがまだ実行中かどうかを確認できます。ただし、ポーリングは非効率的でパフォーマンスに影響を与える可能性があるため、回避することをお勧めします。

例外処理:
型破りなアプローチでは、スレッドごとにキャッチされない例外処理を構成できます。スレッドが完了すると、メイン オブジェクトで処理できる例外がスローされます。

同時実行ユーティリティ:
ロックやシンクロナイザーなどの Java の同時実行ユーティリティを使用して、スレッドの実行を調整できます。

スレッドの完了リスナー:

よりオーソドックスなアプローチは、リスナー インターフェイスを作成することです:

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

次に、Thread を拡張して次のメソッドを実装する抽象基本スレッド クラスを定義します。

public abstract class NotifyingThread extends Thread {
    private final Set<ThreadCompleteListener> listeners = new CopyOnWriteArraySet<>();

    public final void addListener(final ThreadCompleteListener listener) {
        listeners.add(listener);
    }

    public final void removeListener(final ThreadCompleteListener listener) {
        listeners.remove(listener);
    }

    private final void notifyListeners() {
        for (ThreadCompleteListener listener : listeners) {
            listener.notifyOfThreadComplete(this);
        }
    }

    @Override
    public final void run() {
        try {
            doRun();
        } finally {
            notifyListeners();
        }
    }

    public abstract void doRun();
}
ログイン後にコピー

各子スレッドは NotifyingThread を拡張し、run() の代わりに doRun() を実装する必要があります。完了すると、スレッドは自動的に NoticeListeners() を呼び出します。

メイン クラスで ThreadCompleteListener を実装し、各スレッドの作成時に自分自身をリスナーとして追加します。

NotifyingThread thread1 = new OneOfYourThreads();
thread1.addListener(this); // add ourselves as a listener
thread1.start(); // Start the Thread
ログイン後にコピー

各スレッドが完了すると、 NoticeOfThreadComplete メソッドが呼び出され、完了したスレッド インスタンスへのアクセスが提供されます。

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

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