CountDownLatch学习笔记

在java并发中有一个大家都很熟悉的同步工具类CountDownLatch,在多线程中,他的作用是在一个线程执行玩之后再等待其他的进程执行完再进入下一个状态,他允许一个或者多个线程等待,CountDownLatch的实现方式是使用计数的方式,在初始化这个类的时候传入线程数量CountDownLatch(num),每次一个线程执行完就对num减一,直到num变为0,然后再等待的线程又开始执行任务。

下面是一个示例:

 

package study.Mutilthread;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.CountDownLatch;

/**
 * @Auther opprash
 * @Date 2018\8\14 0014 8:31
 */
public class CountDownLatchDemo {
    final static SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    final static String startTime=sdf.format(new Date());
    public static void main(String[]args)throws InterruptedException{
        CountDownLatch latch=new CountDownLatch(2);
        Runer runer1=new Runer("liuxiang",5000,latch);
        Runer runer2=new Runer("lobers",8000,latch);
        runer1.start();
        runer2.start();
        System.out.println("all runer done at"+sdf.format(new Date()));
    }
    static class Runer extends Thread{
        String runername;
        int runTime;
        CountDownLatch latch;
        public Runer(String runername,int runTime,CountDownLatch latch){
            this.latch=latch;
            this.runername=runername;
            this.runTime=runTime;
            //@Override

            }
        public void run(){
            System.out.println("Runer"+runername+"do run begain at"+sdf.format(new Date()));
            doRun();
            System.out.println("Runer"+runername+"do run complete at"+sdf.format(new Date()));
            latch.countDown();
        }
        private void doRun(){
            try{
                Thread.sleep(runTime);
            }catch (InterruptedException e){
                e.printStackTrace();
            }
        }
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值