您的位置:首页 > 编程语言 > Java开发

java 多线程协作CountDownLatch

2014-07-10 15:07 495 查看
CountDownLatch如其所写,是一个倒计数的锁存器,当计数减至0时触发特定的事件。利用这种特性,可以让主线程等待子线程的结束。下面以一个模拟运动员比赛的例子加以说明。

public class CountDownLatchDemo {

final static SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

public static void main(String[] args) throws InterruptedException {

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();//

latch.await();//等待所有工人完成工作

System.out.println("all work done at "+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()));

latch.countDown();//工人完成工作,计数器减一

}

private void doWork(){

try {

Thread.sleep(workTime);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: