【视频笔记】线程池如何知道一个线程的任务已经执行完成?
问题:线程池是如何知道一个线程的任务已经执行完成了?
1、线程池中的工作线程去执行任务的run方法,当run方法结束,那这个任务就结束了。
2、通过isTerminated方法去判断线程池的运行状态,可以循环去判断isTerminated()方法的返回值,来判断线程池所有任务是否已经执行完成;需要先去调用shutdown方法;线程池有个submit方法,提供了future的返回值,可以通过future.get去获取任务执行的结果,当任务没有执行完之前任务会一直阻塞,如果拿到返回值则任务执行完成了。
3、引入countDownLatch这个计数器,它提供了两个方法await() 和countDown,在传入线程池的任务执行完成后,调用countDown表示任务执行结束,计数器归零,唤醒阻塞的线程
必须要获取线程执行结束后的状态,而线程本身是没有返回值的,所以只能通过阻塞-唤醒的方式来实现,future.get和countDownLatch都是这个原理
浙公网安备 33010602011771号