Java判断多线程是否结束

JAVA判断多线程是否结束

应用场景

程序中需要等待多线程任务全部执行完毕后,再执行后续操作。

主要方法

使用方法
1、确定了你开启的线程数,那么在主程序运行前。
CountDownLatch countdown = new CountDownLatch(10);//这里的10就是你的子线程数。

2、在每个子线程结束后,调用 countdown.countDown();
当前线程调用此方法,则计数减一

3、在主线程里启动多线程的方法后面添加:countdown.await();//这里进行同步等待
调用此方法会一直阻塞当前线程,直到计时器的值为0。

4、等所有子线程结束后,执行 countdown.await()后面的代码。

实现代码

public class CountDownLatchDemo { 
    final static SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    public static void main(String[] args) throws InterruptedException {
   		//步骤1:确定开启的线程数,声明CountDownLatch对象 ,对象需要作为入参,传给多线程的构造函数
        CountDownLatch latch=new CountDownLatch(2);
        Worker worker1=new Worker("zhang san", 5000, latch); 
        Worker worker2=new Worker("li si", 8000, latch); 
        worker1.start();// 
        worker2.start();// 
        //步骤3、4、调用await放过,等待所有线程完成工作 
        latch.await();
        System.out.println("全部线程执行完毕!可以开始后续操作:" + sdf.format(new Date())); 
    } 

    static class Worker extends Thread{ 
        String workerName;   
        int workTime; 
        CountDownLatch latch; 
        public Worker(String workerName ,int workTime ,CountDownLatch latch){ 
             this.workerName=workerName; 
             this.workTime=workTime; 
             this.latch=latch; 
        } 
        public void run(){ 
            System.out.println("Worker "+workerName+" do work begin at "+sdf.format(new Date())); 
            doWork();//工作了 
            System.out.println("Worker "+workerName+" do work complete at "+sdf.format(new Date())); 
            //步骤2、每个线程run方法完成工作后,将计数器减一 
            latch.countDown();
 
        } 
             
        private void doWork(){ 
            try { 
                Thread.sleep(workTime); 
            } catch (InterruptedException e) { 
                e.printStackTrace(); 
            } 
        } 
    } 
} 
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页