zoukankan      html  css  js  c++  java
  • 7,CountDownLatch 与 CyclicBarrier 的 区别

    CountDownLatch :

    一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。 
    用给定的计数 初始化 CountDownLatch。由于调用了 countDown() 
    方法,所以在当前计数到达零之前,await 
    方法会一直受阻塞。之后,会释放所有等待的线程,await 
    的所有后续调用都将立即返回。这种现象只出现一次——计数无法被重置。

     CountDownLatch 很适合用来将一个任务分为n个独立的部分,等这些部分都完成后继续接下来的任务,CountDownLatch 只能出发一次,计数值不能被重置。

    CyclicBarrier:

    一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。

    CyclicBarrier可以多次重复使用

    通俗的点说

    CountDownLatch 是主线程阻塞在那里,其他异步子线程,执行完自己的任务后就结束了,

    CyclicBarrier  是主线程不阻塞,子线程全部阻塞,就算其中的某些子线程提前先完成了自己的任务,也阻塞在那里,直到所有的子线程全部执行完各自的任务,然后唤醒了主线程的后续任务后,才结束各自的线程

    举个例子来说

    公司组织去某个公园玩,公司的人事需要知道人员的参与情况,并讲解注意事项 有2种方式

    1:所有的员工自己打车去公园玩, 这时候就是员工自己走自己的,到公园门口,向人事报到,报到完,向人事领了一张安全注意事项后就可以就可以去公园玩了,这个就是 CountDownLatch 

    2:所有的员工先统一到公司集合,统一做公司的大巴到公园门口,人事在大巴上集中给大家讲解了安全注意事项,并发放了安全注意事项, 然后到公园后解散各自去玩, 这个就是 CyclicBarrier

  • 相关阅读:
    SSM后台管理开发日志(三)
    文件权限
    adb详细教学
    adb基础命令001
    SQL训练题库002(建议copy到sqlserver里实战练习,多做一下)
    SQL增删改查,列的更改,更改列名表名,运算符连接符,注释
    SQL增加约束
    SQL 建表、删表和数据,增删约束
    The firstday i join in cnblogs..."Hello everyone"...
    C#日期时间格式化
  • 原文地址:https://www.cnblogs.com/zyguo/p/4344018.html
Copyright © 2011-2022 走看看