我今天发布了关于线程模式的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