CountDownLatch--一组线程完成后其他线程才执行(二)

来源:互联网 发布:网络歌曲 大连站 编辑:程序博客网 时间:2024/06/07 20:36

问题:一个团队赛跑游戏,最后要计算团队赛跑的成绩,主线程计算最后成绩,要等到所有

import java.util.Random;import java.util.concurrent.CountDownLatch;public class CountDownLatchTest2 {public static void main(String[] args) throws InterruptedException {CountDownLatch startSignal = new CountDownLatch(1);CountDownLatch doneSignal = new CountDownLatch(10);//四个人赛跑,这4个可以写一个for循环for (int i = 0; i < 10; i++) {new Thread(new Worker2(startSignal, doneSignal)).start();}System.out.println("线程虽然开启,但是startSignal还未到0,以下让start到0");//由于startSignal是1,上边的4个线程还不能执行startSignal.countDown(); // startSignal=0,线程可以开始执行了doneSignal.await(); // 判断上边4个是否执行完了,如果是,则允许下边的代码执行//开始执行另外一个任务System.out.println("比赛统计...");}}//第一种:等待一个开始信号后,几个线程开始执行class Worker2 implements Runnable {private final CountDownLatch startSignal;private final CountDownLatch doneSignal;  //共用的资源Worker2(CountDownLatch startSignal, CountDownLatch doneSignal) {this.startSignal = startSignal;this.doneSignal = doneSignal;}@Overridepublic void run() {try {startSignal.await();  //startSignal的计数到0了吗?到0了,才能执行doWork2();doneSignal.countDown();} catch (InterruptedException ex) {} }void doWork2() {int t=new Random().nextInt(100)+1;System.out.println(Thread.currentThread().getName()+"选手用时:"+t+"s");}}
//结果线程虽然开启,但是startSignal还未到0,以下让start到0Thread-0选手用时:36sThread-1选手用时:53sThread-2选手用时:64sThread-3选手用时:87sThread-4选手用时:5sThread-5选手用时:56sThread-6选手用时:63sThread-7选手用时:72sThread-8选手用时:6sThread-9选手用时:94s比赛统计...

http://blog.csdn.net/zhujiangtaotaise/article/details/60570882

阅读全文
0 0
原创粉丝点击