怎么判断线程池的任务是不是执行完了
怎么判断线程池的任务是不是执行完了?
有几种方法:
1、使用线程池的原生函数isTerminated()
executor提供一个原生函数isTerminated()来判断线程池中的任务是否全部完成。如果全部完成返回true,否则返回false。
2、使用重入锁,维持一个公共计数
所有的普通任务维持一个计数器,当任务完成时计数器加一(这里要加锁),当计数器的值等于任务数时,这时所有的任务已经执行完毕了。
3、使用CountDownLatch
它的原理跟第二种方法类似,给CountDownLatch一个计数值,任务执行完毕后,调用countDown()执行计数值减一。最后执行的任务在调用方法的开始调用await()方法,这样整个任务会阻塞,直到这个计数值为零,才会继续执行。
这种方式的缺点就是需要提前知道任务的数量。
4、submit向线程池提交任务,使用Future判断任务执行状态
使用submit向线程池提交任务与execute提交不同,submit会有Future类型的返回值。通过future.isDone()方法可以知道任务是否执行完成。