【发布时间】:2011-08-12 17:00:55
【问题描述】:
我开始学习 java,现在我在并发章节。在阅读了一些关于并发的东西之后,我尝试了一个我自己的例子。
public class Task implements Runnable{
public void run() {
while(!Thread.interrupted()) {
try {
System.out.println("task");
TimeUnit.SECONDS.sleep(2);
}catch (InterruptedException e) {
System.out.println("interrupted");
}
}
}
}
public static void main(String[] args) throws Exception {
ExecutorService exec = Executors.newCachedThreadPool();
exec.execute(new Task());
TimeUnit.SECONDS.sleep(10);
exec.shutdownNow();
}
问题是我希望看到以下输出:
task
task
task
task
task
interrupted
但是在我得到这个之后,程序会继续打印,直到我关闭它。
所以,我的问题是我做错了什么?为什么程序继续打印?
【问题讨论】:
-
你试过
exec.shutdown()而不是exec.shutdownNow()吗? -
exec.shutdown() 效果更差。它甚至不会中断线程。
-
不只是捕捉中断的异常,你应该再次引发它以摆脱这段时间。
标签: java multithreading concurrency executor