我今天發佈了關於線程模式的question,幾乎所有人都建議我查看ExecutorService。當executorservice關閉時,運行/阻塞的runnables會發生什麼()
當我正在查看ExecutorService時,我想我錯過了一些東西。如果服務具有正在運行或被阻塞的線程,並且有人調用ExecutorService.shutdown(),會發生什麼情況。正在運行或阻止的線程會發生什麼?
ExecutorService在終止之前是否等待這些線程完成?
我之所以問這個問題的原因是因爲很久以前我曾經涉足Java,他們不贊成使用Thread.stop(),我記得停止線程的正確方法是在必要時使用sempahores並擴展Thread :
public void run() {
while (!this.exit) {
try {
block();
//do something
} catch (InterruptedException ie) {
}
}
}
public void stop() {
this.exit = true;
if (this.thread != null) {
this.thread.interrupt();
this.thread = null;
}
}
ExecutorService如何處理正在運行的線程?
關於shutdown()的文檔中沒有任何內容表示線程將被中斷。 shutdownNow()的文檔表明實現可能會中斷正在運行的任務,但不需要它。 – dty 2010-06-10 21:49:45
爲了避免混淆,我在編輯答案之前發佈了我的評論以正確匹配文檔。 – dty 2010-06-10 22:03:40
@丹尼 - 你可以刪除你的評論... – 2010-06-10 22:11:08