https://www.cnblogs.com/vipstone/p/16075365.html
www.51cto.com
Thread线程是否执行完成,我们可以调用join方法然后等待线程执行完成;那在使用线程池的时候,我们如何知道线程已经执行完成了?本文就带给大家五种判断的方式:
- isTerminated() 方式,在执行 shutdown() ,关闭线程池后,判断是否所有任务已经完成。
- ThreadPoolExecutor 的 getCompletedTaskCount() 方法,判断完成任务数和全部任务数是否相等。
- CountDownLatch 计数器,使用闭锁计数来判断是否全部完成。
- 手动维护一个公共计数 ,原理和闭锁类似,就是更加灵活。
- 使用submit向线程池提交任务,Future 判断任务执行状态。
方法一:isTerminated()
测试代码
上述代码处理逻辑在主线程中进行循环判断,全部任务是否已经完成。
这里有两个主要方法:
- shutdown() :对线程池进行有序关闭。调用该方法后,线程池将不再接受新的任务,但会继续执行已提交的任务。如果线程池已经处于关闭状态,则对该方法的调用没有额外的作用。