isShutdown和isTerminated测试效果示例代码
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class Test{
//由于只是为了测试下效果,所以随便搞个线程池来搭配,生产建议手动创建线程池
static ExecutorService executorService = Executors.newCachedThreadPool();
static class Task implements Runnable {
@Override
public void run() {
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "运行任务");
}
}
public static void main(String[] args) throws Exception {
for (int i = 0; i < 100; i++) {
executorService.execute(new Task());
}
System.out.println("准备用shutdown方法关闭线程池");
executorService.shutdown();
TimeUnit.SECONDS.sleep(1);
System.out.println("线程池调用了shutdown方法,isShutdown=" + executorService.isShutdown());
System.out.println("任务还在执行中,isTerminated=" + executorService.isTerminated());
TimeUnit.SECONDS.sleep(3);
System.out.println("3秒后,任务都执行结束了,isTerminated=" + executorService.isTerminated());
}
}
运行结果:
- 可以看到调用了shutdown方法后,isShutdown方法返回的是true,但是之后还是有任务在执行的,而isTerminated方法返回的是false。
- 而在等待了3秒后,任务都执行完毕了,isTerminated方法返回的就是true了
总结
线程池调用了shutdown方法后,isShutdown方法返回的就是true,但是只要还有任务在执行,isTerminated方法返回的就是false,等到所有任务都执行完毕,isTerminated就会返回true了。