• 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);
    }
    
    }
  • 相关阅读:
    png 图片的缩放
    数据结构>图的最短路径
    2007年7月25日在博客园的排名上升到前400名
    C# 汉字转拼音(全拼)
    修改 Linux 主机名
    C# 事件的继承
    一个实现了 IDisposable 接口的基类
    Windows 防火墙上也有端口映射功能
    网上邻居不能访问的问题
    令网站提速的7大秘方
  • 原文地址:https://www.cnblogs.com/leodaxin/p/7653201.html
Copyright © 2020-2023  润新知