Java多线程之CountDownLatch
来源:互联网 发布:win 远程桌面 控制mac 编辑:程序博客网 时间:2024/05/16 08:05
CountDownLatch犹如倒计时计数器,调用CountDownLatch对象的countDown方法就将计数器减1,当计数器为0时,则所有等待者或单个等待者开始执行。
package com.javase.thread;import java.util.Random;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.ReentrantLock;public class CountDownLatchDemo {private static boolean isPrint1=true;private static ReentrantLock lock = new ReentrantLock();public static void main(String[] args) {final CountDownLatch cdlStart = new CountDownLatch(1);final CountDownLatch cdlEnd = new CountDownLatch(3);ExecutorService threadPool = Executors.newCachedThreadPool();for(int i=0;i<3;i++){Runnable command =new Runnable(){public void run() {System.out.println(Thread.currentThread().getName()+" is waiting now");try {cdlStart.await();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}lock.lock();try{if(isPrint1){System.out.println("All the 3 threads have already start to continue run ...");isPrint1=false;}}finally{lock.unlock();}try {TimeUnit.MILLISECONDS.sleep(new Random().nextInt(5000));} catch (InterruptedException e1) {e1.printStackTrace();}cdlEnd.countDown();System.out.println(Thread.currentThread().getName()+" has arrived the end ");}};threadPool.execute(command);}try {TimeUnit.MILLISECONDS.sleep(1000);} catch (InterruptedException e1) {e1.printStackTrace();}System.out.println(Thread.currentThread().getName()+" thread send the start order ");cdlStart.countDown();System.out.println(Thread.currentThread().getName()+" thread is waiting for the result...");try {cdlEnd.await();} catch (InterruptedException e) {e.printStackTrace();}System.out.println("All the 3 threads have arrived the end ...");threadPool.shutdown();}}运行结果:
pool-1-thread-1 is waiting now
pool-1-thread-2 is waiting now
pool-1-thread-3 is waiting now
main thread send the start order
main thread is waiting for the result...
All the 3 threads have already start to continue run ...
pool-1-thread-3 has arrived the end
pool-1-thread-1 has arrived the end
pool-1-thread-2 has arrived the end
All the 3 threads have arrived the end ...
- Java多线程之CountDownLatch
- Java多线程之CountDownLatch
- Java多线程之CountDownLatch
- JAVA多线程之CountDownLatch
- Java多线程之CountDownLatch
- Java多线程之CountDownLatch
- Java多线程之CountDownLatch
- Java多线程之----CountDownLatch
- Java多线程之CountDownLatch
- java多线程之CountDownLatch
- java多线程之CountDownLatch
- Java多线程之CountDownLatch学习
- java 多线程之CountDownLatch用法
- java 多线程编程之CountDownLatch
- JAVA多线程之(CountDownLatch)
- (十)java多线程之CountDownLatch
- java 多线程并发之-- CountDownLatch
- Java多线程并发之CountDownLatch
- 跨出编写300个用例的第一步
- Ffmpeg快速应用开发
- innodb如何处理对innodb行记录的update
- HTML5 缓存: cache manifest
- flash的历史
- Java多线程之CountDownLatch
- 黑马程序员----对线程的一些解释 总结
- ffmpeg提取音频播放器总结
- android: activitity 的四种加载方式
- Activity的taskAffinity属性
- 删除数据库不可用连接
- FFMpeg的解码流程
- 英国研究人员开发出纳米细胞探测器
- FFmpeg功能和参数介绍