java.util.concurrent.CountDownLatch
2015-11-25 15:44
441 查看
/* * 一组线程,等待另一组线程。 * */ public class CountDownLatchDemo { public static void main(String[] args) throws InterruptedException { final CountDownLatch cdl = new CountDownLatch(1); final CountDownLatch cdl2 = new CountDownLatch(3); // 裁判 new Thread(new Runnable() { @Override public void run() { System.out.println("预备:"); //此处倒计时3秒 for (int i = 3; i >= 1; i--) { System.out.println(i + "..."); try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("跑!"); // 计数器 减1,此时在cdl上等待的运动员线程等待状态被解除,开始执行 cdl.countDown(); } }).start(); // 运动员 for (int i = 0; i < 3; i++) { new Thread(new Runnable() { @Override public void run() { try { cdl.await(); // 等待,直到计数器变为0(也就是倒数结束)为止 System.out.println(Thread.currentThread().getName() + ":启动了..."); TimeUnit.SECONDS.sleep(new Random().nextInt(5)+1); System.out.println("--》"+Thread.currentThread().getName() + ":到达终点了..."); //计数器减1,三个运动员线程启动完毕之后,在cdl2上等待的宣布成绩线程解除等待状态 cdl2.countDown(); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); } new Thread(new Runnable() { @Override public void run() { try { cdl2.await(); System.out.println("宣布成绩!"); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); } }
结果:
预备: 3... 2... 1... 跑! Thread-2:启动了... Thread-1:启动了... Thread-3:启动了... --》Thread-2:到达终点了... --》Thread-3:到达终点了... --》Thread-1:到达终点了... 宣布成绩!
相关文章推荐
- Java集合---ArrayList的实现原理
- java学习笔记--java第一课,java入门基础篇
- Spring MVC 教程,快速入门,深入分析
- eclipse jad 反编译 插件安装
- 解决eclipse内存溢出
- spring mvc写XML的时候出现过的问题
- SSH框架学习(三、在struts基础上加入spring)
- springmvc 类对象新的理解
- 第一天开通博客,写点什么
- Java变量初始化流程及其中的一些问题
- 通过Java代码设置layout_weight
- Java随手笔记8之包、环境变量和访问控制及maven profile实现多环境打包
- 35 个 Java 代码性能优化总结
- SSH框架学习(四、struts+spring搭建,spring注解注入)
- eclipse报错:This Android SDK requires Android Developer Toolkit version 23.0.0 or above.
- java中对象的克隆
- eclipse中如何对jar包关联的源代码进行调试?
- 阅读优秀的JAVA模板引擎Beetl的使用说明有感
- Java的安全学习(包括加密,数字签名,证书和认证)
- A Scala Tutorial for Java Programmers