マイコード:Javaは:フォースExecutorServiceのスレッドの停止
String[] torrentFiles = new File("/root/torrents/").list();
if(torrentFiles.length == 0 || torrentFiles == null)
{
System.exit(0);
}
ex = Executors.newFixedThreadPool(3);
for(String torrentFile : torrentFiles)
{
ex.submit(new DownloadTorrent("/root/torrents/" + torrentFile));
}
ex.shutdown();
try
{
ex.awaitTermination(30, TimeUnit.MINUTES);
}
catch(InterruptedException ex1)
{
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex1);
}
しかし、時には急流のダウンロードは未知の時間値を取り、«awaitTermination
»私が望むように動作しません。私はすべての実行スレッドを30分後に即座に停止する必要がありますが、私が知っているように«awaitTermination
»ちょうどinterrupt()
ループまたは待機中の方法を使用してください。だからこの瞬間が起これば、タイムアウトはうまくいかない。だから、どのように?
shutdownNow()を使用して他の実行中のスレッドをすべて停止していますが、サービス応答を待っているスレッドを停止できます。スレッドをスリープ状態にするとすぐに停止しますが、以前のケースではスレッドは停止しません。具体的な理由はありますか? – Akshay
@Akshay - はい、それが起こった理由があります。 Thread.sleep()は割り込みステータスをチェックし、すでに割り込みが発生している場合はInterruptedExceptionをスローします。しかし、このようなブロッキングが起こっていない場合、docに記載されているように、積極的に実行中のタスクの処理を最善の努力で止めることはできません。 – skm