有点纠结线程池关掉后,队列里面的线程是否还能执行,做了以下实验,得出结论,shutdown方法 执行后,队列中的还能执行完毕,shutdownNow方法后不能执行了。
1、shutdown方法
ExecutorService service = Executors.newFixedThreadPool(2);
for(int i=0;i<10;i++){
final int j=i;
service.execute(
new Runnable() {
@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(j);
}
}
);
System.out.println(j+":aaaaaaaaaaaa");
}
service.shutdown();
System.out.println(":关闭");
Thread.sleep(100000);
0:aaaaaaaaaaaa
1:aaaaaaaaaaaa
2:aaaaaaaaaaaa
3:aaaaaaaaaaaa
4:aaaaaaaaaaaa
5:aaaaaaaaaaaa
6:aaaaaaaaaaaa
7:aaaaaaaaaaaa
8:aaaaaaaaaaaa
9:aaaaaaaaaaaa
:关闭
1
0
2
3
4
5
7
6
9
8Process finished with exit code 0
2、shutdownNow方法
0:aaaaaaaaaaaa
1:aaaaaaaaaaaa
2:aaaaaaaaaaaa
3:aaaaaaaaaaaa
4:aaaaaaaaaaaa
5:aaaaaaaaaaaa
at java.lang.Thread.sleep(Native Method)
6:aaaaaaaaaaaa
7:aaaaaaaaaaaa
at us.codecraft.tinyioc.BeanFactoryTest$1.run(BeanFactoryTest.java:40)
8:aaaaaaaaaaaa
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
9:aaaaaaaaaaaaat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
:关闭at java.lang.Thread.run(Thread.java:748)
0java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at us.codecraft.tinyioc.BeanFactoryTest$1.run(BeanFactoryTest.java:40)
1
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)Process finished with exit code 0