在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();
}
}
}
}