スレッドの完了ステータスの確認
マルチスレッド プログラミングでは、子スレッドの実行がいつ終了したかを知ることが重要です。この質問では、スレッドの完了ステータスを監視するためのさまざまなアプローチを検討します。
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 サイトの他の関連記事を参照してください。