メインスレッドでExecutorService.shutdownNow()を実行しても、すべてのスレッドが停止するわけではありませんが、Thread1またはThread2でExecutorService.shutdownNow()を実行するとサブスレッドが終了します シャットダウンコマンドを最下位レベルにカスケードする方法はありますか?ツリー内のすべてのスレッドを停止するには?
Main thread
/ \
/ \
Thread 1 Thread 2
| | | | |
A B C D E
メインスレッドからすべてのスレッドを削除するにはどうすればよいですか?スレッドの子スレッドの中断を処理する方法
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(threadExecutor);
List<Future<Object>> futures = new ArrayList<Future<Object>>();
for(MultiThread mt : threadList)
{
futures.add(completionService.submit(mt));
}
while (futures.size() > 0) {
Future f = completionService.take();
futures.remove(f);
try {
Object result = f.get();
System.out.println(result);
} catch (Exception e) {
System.out.println("Caught exception from one task: " + e.getCause().getMessage() + ". shutdown now!");
threadExecutor.shutdownNow();
break;
}
}
をcraeteするスニペットの下に使用して
? Javadocに基づいて
実行者の数はいくつですか?それらのすべてに対してインスタンスメソッド 'shutdownNow()'を呼び出しましたか? –
私は2つのエグゼキュータを持っています...メインスレッドでは1つ、スレッド1とスレッド2を作成する子スレッドではもう1つです。両方のエグゼキュータでshutdownNow()を呼び出しましたが、thread1とthread2エグゼキュータのshutdownNow()のみが動作しています。 – happy
マルチスレッドでの私の経験から、各スレッドをループしてヌルに設定したり、終了させたりする必要があります。私は通常、Runnableを実装してスレッドを作成したいと思っています。 – Dominic