首页 > 其他分享 >CyclicBarrier(同步屏障)了解吗?

CyclicBarrier(同步屏障)了解吗?

时间:2023-10-22 14:01:11浏览次数:32  
标签:同步 可以 到达 屏障 线程 CountDownLatch CyclicBarrier

CyclicBarrier的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它要做的事情是,让一 组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。

它和CountDownLatch类似,都可以协调多线程的结束动作,在它们结束后都可以执行特定动作,但是为什么要有CyclicBarrier,自然是它有和CountDownLatch不同的地方。

因为CountDownLatch的使用是一次性的,无法重复利用,我们用CyclicBarrier 就可以实现,因为它可以重复利用。

CyclicBarrier最最核心的方法,仍然是await():

如果当前线程不是第一个到达屏障的话,它将会进入等待,直到其他线程都到

达,除非发生被中断、屏障被拆除、屏障被重设等情况;

上面的例子抽象一下,本质上它的流程就是这样就是这样:

CyclicBarrier(同步屏障)了解吗?_多线程

标签:同步,可以,到达,屏障,线程,CountDownLatch,CyclicBarrier
From: https://blog.51cto.com/u_16269508/7976423

相关文章

  • OpengGL 中的同步及资源共享
    1.为什么需要同步由于OpenGLAPI的执行是异步的,所以需要同步,如果是这些API是同步的就没有这个话题了。异步API可以进行缓存,从而可以在合适的时机批量的将这些API调用(称为API命令)发送给GPU执行,避免应用过于频繁的在内核态和用户态切换。这里的异步指的是一个GLAPI调用结束并不......
  • android 友盟SNS_SDK为Android应用加入SNS分享、同步功能
    使用友盟SNS_SDK为Android应用加入SNS分享、同步功能很多朋友在开发Android应用的过程中,都想加入社会化的分享功能,如将自己的应用使用状态或心得同步到新浪微博、人人网或腾讯微博等。这些社交网络或微博都已经发布了针对开发者的开放平台(关于开放平台的相关信息,请参考《说说微......
  • 多线程编程同步:Posix信号量
    信号量的定义IPC是进程间通信(interprocesscommunication)的简称。狭义上,IPC主要用于进程间;广义上,IPC可用于进程间或线程间。Posix消息队列、Posix信号量和Posix共享内存区合称为“PosixIPC”.信号量(semaphore)是一种用于提供不同进程间或一个给定进程的不同线程间同步手段。......
  • 00-开源离线同步工具DataX3.0重磅详解!
    1概览DataX是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。1.1设计理念为了解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传......
  • Canal实现缓存同步策略
    Canal介绍个人在学习Redis的过程中,遇到多级缓存的处理方法,我本人的多级缓存分类里面提到过个人学习中的项目构成。简单来说就是OpenResty集群负责缓存一些静态性比较强的数据,比如说这个网页上的分类信息等基本不变化的数据,而Redis和JVM进程缓存(使用Caffeine实现)负责缓存变化性......
  • 使用SyncFavor进行文件同步
    SyncFavor是基于C#开发的免费文件同步工具,运行在windows上,下载链接:https://github.com/bsmith-zhao/sync同步管理界面:批量运行界面: 主从同步示例 下载压缩包解压,双击sync.exe启动同步管理器,可以看到空白的管理界面:点击工具栏的[添加工作区]创建工作区,工作区是一系列......
  • MySQL主从复制无法同步删除操作吗?【转】
    简介在MySQL主从复制中,当主库执行删除操作时,从库并不会同步删除对应的数据。这是由于MySQL的复制机制决定的。为了解决这个问题,我们可以通过在主库上创建触发器来实现删除操作的同步。解决方案概览下面是解决方案的整体流程图: 创建触发器首先,我们需要在主库上创建一个触发......
  • 多线程编程同步:读写锁
    读写锁的定义互斥锁锁住后,保证仅有一个线程处理数据(多线程共享的)。要是数据的读取比写入更频繁,且读取操作不涉及共享变量的修改,应允许多个线程读取操作对共享变量的读取。直接使用互斥锁效率太低,若使用读写锁,可以大大提高效率。读写锁的分配规则:1)只要没有线程持有某个特定的读......
  • kettle同步mysql到mysql
    上传mysql驱动包到lib目录下创建表连接表输入表输出(没有创建表)执行表创建表sql ......
  • vue中同步方法的实现
    这篇文章主要介绍了vue中同步方法的实现,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教目录vue同步方法实现有三种实现方式vue中的同步和异步问题同步异步总结vue同步方法实现有三种实现方式1、axios本身属于Promise利用函数式的then获取请求返回结......