关于ExecutorService的shutdown()问题

javacow 2017-10-22 10:59:18
代码如下:

package test;

import java.util.Scanner;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class ESShutdownTest {

private static ExecutorService ES=Executors.newFixedThreadPool(10);

public static void main(String[] args) {
//监视console输入,如果输入CLOSE,则执行ES的shutdown方法
Thread scanner =new Thread(new ScanerThread());
scanner.start();

for(int i=0;i<100;i++){
Thread t=new Thread(new RunThread());
ES.submit(t);
}
ES.shutdown();
}
/**
* 模拟工作
* @author Administrator
*
*/
private static class RunThread implements Runnable {

public void run() {
try {
System.out.println(Thread.currentThread().getName()+":begin");
Thread.sleep(10000);
System.out.println(Thread.currentThread().getName()+":finish!");
} catch (InterruptedException e) {
e.printStackTrace();
}
}

}

private static class ScanerThread implements Runnable {

public void run() {
System.out.println("Scanner is running");
Scanner in=new Scanner(System.in);
String key=in.nextLine();
System.out.println(key);
if(key.equals("CLOSE")){
System.out.println("ThreadPool will close!");
ES.shutdown();
try {
boolean b=ES.awaitTermination(10, TimeUnit.SECONDS);
System.out.println(b);
} catch (InterruptedException e) {
e.printStackTrace();
}
}else if(key.equals("CLOSE NOW")){
System.out.println("ThreadPool will close NOW !");
ES.shutdownNow();
}
}
}

}


ExecutorService的shutdown()方法调用之后,不是不接受新的线程了吗
为什么在console输入CLOSE,还有新的线程进入线程池?
请高手指教一下!
...全文
575 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
lifewell1 2017-10-23
  • 打赏
  • 举报
回复
调用 shutdown() 方法,ExecutorService 并不会马上关闭,而是不再接收新的任务,壹但所有的线程结束执行当前任务,ExecutorServie 才会真的关闭。 你应该是有线程没执行完,不是新的线程进入。 如果你希望立即关闭 ExecutorService,你可以调用 shutdownNow() 方法。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧