我的代碼:的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
»沒有作品我想要的。我需要在半小時後立即停止所有執行的線程,但正如我所知,「awaitTermination
」只是使用interrupt()
方法,該方法只能在循環或等待中使用。所以如果這一刻發生,暫停不起作用。那麼,如何?
我也使用shutdownNow()來停止所有其他正在執行的線程,但我能夠停止正在等待服務響應的線程。如果我讓線程進入休眠狀態,那麼它會立即停止,但在前一種情況下它不會。這有什麼特別的原因嗎? – Akshay 2015-02-26 23:08:49
@Akshay - 是的,這是有理由發生的。 Thread.sleep()檢查中斷狀態,如果線程已經中斷,則它會拋出InterruptedException。但是,如果沒有發生這種阻塞事件,正如文檔中提到的那樣,除了竭盡全力嘗試停止處理主動執行的任務之外,沒有任何保證。 – skm 2017-07-15 16:41:45