zoukankan      html  css  js  c++  java
  • Java中关于CountDownLatch的使用

    CyclicBarrier工具类主要是控制多个线程的一起执行,演示程序:

    import java.util.Random;
    import java.util.concurrent.CountDownLatch;
    /**
    * 
    * CyclicBarrier和CountDownLatch功能类似,都可以用作在所有线程都做好准备(比如赛跑:
    * 每一个运动员可以认为是一个线程,只有当所有运动员做好准备才能鸣枪开始跑)之后一起触发运行。 <br>
    * <br>
    * 但是也有区别:<br>
    * 1:CountDownLatch(初始值为线程个数)需要每当一个线程准备好之后,调用一下countDown方法,告诉CountDownLatch又有一个线程已经完成准备,当CountDownLatch值为0时候则触发所有线程一起执行<br>
    * 2:CyclicBarrier(初始值为线程个数)需要每当一个线程准备好之后运行时候会阻塞在await处,当所有线程都阻塞在await处时候,即可触发所有线程执行。(CyclicBarrier:可以循环使用,每当触发完毕一次之后还可以
    * 再次使用该CyclicBarrier的实例对象)
    */
    public class CountDownLatchDemo {
    
    public static void main(String[] args) throws Exception {
    
    CountDownLatch c = new CountDownLatch(3);
    Thread t1 = newThread("t1", c);
    Thread t2 = newThread("t2", c);
    Thread t3 = newThread("t3", c);
    t1.start();
    t2.start();
    t3.start();
    
    System.out.println("线程启动完毕!");
    
    // 下面工作模拟线程的一些自资源初始化
    
    // 模拟线程1资源初始化
    int time = new Random().nextInt(5);
    System.out.println(" sleep " + time + "秒 。");
    Thread.sleep(time * 1000);
    c.countDown(); //到此线程1初始化完毕
    
    // 模拟线程2资源初始化
    time = new Random().nextInt(5);
    System.out.println(" sleep " + time + "秒 。");
    Thread.sleep(time * 1000);
    c.countDown();//到此线程2初始化完毕
    // 模拟线程3资源初始化
    time = new Random().nextInt(5);
    System.out.println(" sleep " + time + "秒 。");
    Thread.sleep(time * 1000);
    c.countDown();//到此线程3初始化完毕
    
    // 所有资源都准备完毕,触发三个线程执行
    
    }
    
    public static Thread newThread(final String threadName, final CountDownLatch c) {
    
    return new Thread(new Runnable() {
    
    @Override
    public void run() {
    try {
    
    c.await();
    System.out.println(threadName + " is running .");
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    
    }
    }, threadName);
    }
    
    }
  • 相关阅读:
    利用相关的Aware接口
    java 值传递和引用传递。
    权限控制框架Spring Security 和Shiro 的总结
    优秀代码养成
    Servlet 基础知识
    leetcode 501. Find Mode in Binary Search Tree
    leetcode 530. Minimum Absolute Difference in BST
    leetcode 543. Diameter of Binary Tree
    leetcode 551. Student Attendance Record I
    leetcode 563. Binary Tree Tilt
  • 原文地址:https://www.cnblogs.com/leodaxin/p/7653201.html
Copyright © 2011-2022 走看看