スレッドがisAlive、joinなどの組み込み関数を使用せずに実行を完了したことを知ることは可能ですか? スレッドA、B、Cが並行して実行されているとします。それで、すべてのスレッドが実行を完了したかどうかを知る方法。スレッドの実行
スレッドの実行
答えて
CountDownLatchを使用すると、それを手助けすることができます。クラス名であなたの実行方法でそう
class ClassName implements Runnable
{
private CountDownLatch latch;
//constructor:
ClassName(CountDownLatch latch)
{
this.latch = latch;
}
//run method:
@Override
void run()
{
//Your thread code...
latch.countDown();
}
}
: あなたが
CountDownLatch latch = new CountDownLatch(threadsCount);
ExecutorService executor = Executors.newFixedThreadPool(threadsCount);
for (int x = 0; x < threadsCount; x++)
{
executor.submit(new ClassName(latch));
}
try
{
latch.await();
}
catch (Exception ignored){}
//all threads are done at this point
のようなものを作ることができますそして、あなたのクラス名で、あなたがこのような何かを持っている必要がありますので、のは、あなたがExecutorServiceのでスレッドを作っているとしましょうlatch.countDown()を呼び出す必要があります。
CountDownLatchは自動的に同期化されるため、そのことについて考える必要はありません。
ラッチを使用するためにExectuorServiceを使用する必要はありませんが、これは単なる例です。
threadsCountは明らかに、スレッド数を表す整数です。 – user1478293
スレッドが実行を完了したときに本当に〜について質問しているなら、これは実行しません。特に、複数の 'Runnable'に対して同じスレッドを維持する' ExecutorService'では特にそうではありません。 – Savior
次に、質問を正しく理解しているか、実際には何を意味するのか分かりません。基本的にスレッドが終了した時点を知りたければ、これは実際に動作します。 – user1478293
さて、あなたは実質的に悪いアイデアを求めていることから、ここでは逆方向に、非決定論的なソリューションです:
public static void main(String[] args) {
Thread t1 = new Thread(() -> System.out.println("t1"));
t1.start();
WeakReference<Thread> r1 = new WeakReference<Thread>(t1);
t1 = null;
Thread t2 = new Thread(() -> System.out.println("t2"));
t2.start();
WeakReference<Thread> r2 = new WeakReference<Thread>(t2);
t2 = null;
while (r1.get() != null || r2.get() != null) {
System.gc();
}
System.out.println("done!");
}
ご協力いただきありがとうございます。しかし、それは悪い考えではありません。このような質問をする人もいます。そして、私の友人はこの質問をインタビュー – userLearning
@userLearningで得ました。その場合、あなたの答えはここにあります。それは、タスク14が完了したかどうかを確認する方法が問題ではありますが、ユーザー1478293の回答に従ってください。 – shmosel
- 1. スレッド実行タイミング
- 2. 同時スレッド実行の実行
- 3. スレッド#実行とスレッド#ウェイクアップの違いは?
- 4. Redrawwindow実行中のスレッド
- 5. スレッド順実行の問題
- 6. スレッド実行の問題
- 7. スレッドのリストを実行し
- 8. 長時間実行スレッド+ライフサイクル
- 9. DestroyJavaVMスレッド常に実行中
- 10. スレッド上でEventHandlerを実行
- 11. Delphi 2010の他のスレッドの実行ポイント
- 12. シリアルポートの通信が実行中のスレッド
- 13. スレッドの実行順序のJava
- 14. WinRTのUIスレッドでコードを実行
- 15. 変更の実行スレッドがタスクを
- 16. ロック付きループ内でのスレッド実行
- 17. C#他のスレッドでコードを実行
- 18. 別のスレッドでフォームを実行中
- 19. PARTIAL_WAKE_LOCKとサービスで実行中のスレッド
- 20. Javaの同時実行 - 監視スレッド
- 21. UI以外のスレッドでモーダルダイアログを実行
- 22. WxPythonのGUIスレッドで関数を実行
- 23. ウォッチャーからスレッドの実行アレイ
- 24. Javaのスレッド内でスレッドを実行できますか?
- 25. Windowsのスレッド(実行時にC、pthreadsを、STD ::スレッド)
- 26. Androidスレッド - 別のスレッドからスレッドを実行し、ハンドラメッセージを待っています
- 27. 他のスレッドが実行されていないときに複数のスレッドを実行しますか?
- 28. C#スレッド化、スレッドをパラメタでメソッドを実行するには?
- 29. スレッドでクラスメソッドを実行する(Python)
- 30. スレッドは実行されません
なぜあなたは 'join'以外のものを使用したいのでしょうか? – Savior
'if'を使うことができますか、それとも組み込みですか? – shmosel
run()メソッドが...の終わりにフラグを立てるために...を返した後にスレッドがその実行を終了することを考えれば、別の方法があります。それでもあなたの目標は何ですか? @ shmosel。 –