如何判断线程运行结束

1.join()
如果是一个线程,可以使用此方法,多个不合适
2.CountDownLatch
此为并发计数器,每个线程结束后减一(countDown()),countDownLatch.await();//等待所有子线程执行完

3.线程池ThreadPoolExecutor的shutdown与awaitTermination方法

executor.shutdown();//只是不能再提交新任务,等待执行的任务不受影响  

try {  
        boolean loop = true;  
        do {    //等待所有任务完成  
            loop = !executor.awaitTermination(2, TimeUnit.SECONDS);  //阻塞,直到线程池里所有任务结束
        } while(loop);  
    } catch (InterruptedException e) {  
        e.printStackTrace();  
    } 

service.shutdown();  

while(!service.awaitTermination(2, TimeUnit.SECONDS)){  

        System.out.println("service not stop"); 

    }  


//或者isTerminated,如果关闭后所有任务都已完成,则返回 true。注意,除非首先调用 shutdown 或 shutdownNow,否则 isTerminated 永不为 true。

executor.shutdown();//只是不能再提交新任务,等待执行的任务不受影响  

while(true){  
        if(exe.isTerminated()){ 
            System.out.println("所有的子线程都结束了!");  
            break;  
        }  
        Thread.sleep(1000);    
    }  

ThreadPoolExecutor.getActiveCount() == 0 ?

猜你喜欢

转载自blog.csdn.net/weixin_42221136/article/details/89841322
今日推荐