zoukankan      html  css  js  c++  java
  • CountDownLatch的和CyclicBarrier使用

    CyclicBarrier的使用:

      假设只有一个场景:每个线程代表一个跑步运动员,当运动员都准备好后,才一起出发,只要有一个人没有准备好,大家都等待。

    CountDownLacth使用:

      他经常用于监听某些初始化操作,等初始化执行完毕后,通知主线程继续工作。

    下面先看一个CountDownLatch的demo:

    看一下运行的结果:

    假如把t3线程的countDown.countDown();方法注释掉, 那么t1线程就永远都不会结束。

    下面看一个cyclicBarrier使用:

    同样是看一个demo:

    我们看一下运行结果:

      

    会发现,最后go的时间都是一样的,也就是和最后一个准备完成的时间是一致的;需要注意的是,为什么是3个准备完成进入await的时候,然后一起执行的,是因为这三个里面用的都是同一个CyclicBarrier对象,而且这个对象初始化的时候,传入了3这个数值。加入传的是4,那这三个线程都会一直运行,不会结束。

    注意两者的区别:

      CountDownLatch是属于一个线程等待,其他N个线程给那一个线程发送通知,然后这一个线程执行。

      CyclicBarrier是所有线程都是参与阻塞的,在最后一个线程处于等待的时候,那这个时候,所有线程都开始跑自己的线程。

  • 相关阅读:
    javascript之instanceof原理
    x86之描述符表寄存器
    Mac之DTerm
    C的一些特性
    Mac i386 Operands and Addressing Modes
    shell之条件测试
    linux之dup&dup2
    javascript之this
    x86之段描述符
    进制转换
  • 原文地址:https://www.cnblogs.com/shmilyToHu/p/6474672.html
Copyright © 2011-2022 走看看