我开始学习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()
吗? - Sam DeHaan