在很多场景下,我们需要等待线程池中的所有任务都执行完才能进行下一步。对于线程Thread,很容易实现,加个join方法就可以解决。但是判断线程池比较麻烦。在本文中,我们提供了4种方法来判断线程池任务是否已经执行:使用isTerminated方法来判断。使用getCompletedTaskCount方法判断。使用CountDownLatch来判断。使用CyclicBarrier来判断。接下来,让我们一一来看。不判断的问题如果不判断线程池是否已经执行,会出现如下问题,如下代码所示:importjava.util.Random;importjava.util.concurrent.LinkedBlockingDeque;importjava.util.concurrent.ThreadPoolExecutor;importjava.util.concurrent.TimeUnit;publicclassThreadPoolCompleted{publicstaticvoidmain(String[]args){//创建线程池ThreadPoolExecutorthreadPool=newThreadPoolExecutor(10,20,0,TimeUnit.秒,新的LinkedBlockingDeque<>(1024));//添加任务addTask(threadPool);//打印结果System.out.println("线程池任务执行完成!");}/***添加任务到线程池*/privatestaticvoidaddTask(ThreadPoolExecutorthreadPool){//任务总数finalinttaskCount=5;//添加任务for(inti=0;i(1024));//2.添加任务addTask(threadPool);//3.判断线程池是否完成isCompleted(threadPool);//【核心调用方法】//4.线程池执行完System.out.println();System.out.println("线程池任务执行完成!");/***方法一:isTerminated实现方法*判断线程池中的所有任务是否都执行完毕*/privatestaticvoidisCompleted(ThreadPoolExecutorthreadPool){threadPool.shutdown();while(!threadPool.isTerminated()){//如果没有完成则继续循环}}/***将任务添加到线程池*/privatestaticvoidaddTask(ThreadPoolExecutorthreadPool){//任务总数finalint任务数=5;//添加任务for(inti=0;i(1024));最终inttaskCount=5;//任务总数//单计数器CountDownLatchcountDownLatch=newCountDownLatch(taskCount);//①//添加任务for(inti=0;i(1024));最终inttaskCount=5;//任务总数//循环计数器①CyclicBarriercyclicBarrier=newCyclicBarrier(taskCount,newRunnable(){@Overridepublicvoidrun(){//线程池执行完毕System.out.println();System.out.println("线程池中的所有任务都已执行完毕!");}});//添加任务for(inti=0;i