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(); 
            } 
        } 
    } 
} 
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值