当我们把一个任务丢给线程池执行的时候,线程池会调度工作线程来执行run方法。
当run执行结束后,也就意味着这个任务完成了。所以线程池中的工作线程是通过同步调用任务的run()方法并且等待run()方法完成后。
从外部线程池去获取线程池内部的任务执行状态 ,有几种方法可以实现。
一旦线程池的状态是Terminated意味着线程池中的所有任务都完成了,前提的主动调用isShutdown()方法。所以这个不是很友好
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(2);
CountDownLatch countDownLatch = new CountDownLatch(2);
executorService.submit(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
countDownLatch.countDown();
}
});
}