文章标题
来源:互联网 发布:linux chromium log 编辑:程序博客网 时间:2024/06/08 11:13
package cn.tool;import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class CountDownLatchTest { /** *CountDownLatch 用给定的计数 初始化 *由于调用了countDown() 方法,所以在当前计数到达零之前,await 方法会一直受阻塞。 *之后,会释放所有等待的线程,await 的所有后续调用都将立即返回。 * @throws InterruptedException */ public static void main(String[] args) throws InterruptedException { /** * 创建3个子线程,1个主线程。主线程通知开始后,三个子线程再执行;三个子线程都执行完了之后,主线程宣告结果。 */ ExecutorService pool=Executors.newCachedThreadPool(); final CountDownLatch mainL=new CountDownLatch(1); final CountDownLatch subL=new CountDownLatch(3); // 会创建三个子线程 for(int i=0;i<3;i++){ Runnable ren=new Runnable(){ @Override public void run() { try { System.out.println(Thread.currentThread().getName()+ "正准备接受命令"); mainL.await();//当主线程发布命令后,mainL变为0,子线程才能往下执行 System.out.println(Thread.currentThread().getName()+ "已接受命令"); Thread.sleep(202); subL.countDown(); } catch (InterruptedException e) { e.printStackTrace(); } } }; pool.execute(ren); } //主线程 Thread.sleep(200); System.out.println(Thread.currentThread().getName()+ "正准备发布命令"); mainL.countDown();// mainL变为0,子线程会从阻塞的地方继续往下执行 System.out.println(Thread.currentThread().getName()+ "准备接受结果"); subL.await();// 等待子线程运行完(即subL=0)后才能运行 System.out.println(Thread.currentThread().getName()+ "接受到所有结果"); pool.shutdown();}}
0 0
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- Android 以太网MAC地址,wifiMAC地址
- VB.net 取得类型名字
- Visual Studio配置(5):项目属性页-C/C++(1)
- CentOS 7 网卡
- cs231n的第一次作业svm
- 文章标题
- Heimdall线下测试环境--CDH5 安装
- Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04
- 自定义LayoutManager
- JavaScript数组去重的原型方法
- java finalize()方法解析
- JS基本数据类型
- 【翻译】理解Joomla!模板
- swift 函数