Java 同步器 CountDownLatch、CyclicBarrier 、Phaser、Exchanger、Semaphore

常用同步器如下

  • CountDownLatch : 计数递减门闩,用于控制一个线程等待其他线程都到达指定位置时才开始工作。
  • CyclicBarrier : 循环栅栏,用于控制多个线程在一些指定的位置同步,可以指定多个位置。
  • Phaser : 动态阶段同步器,相当于增强的CyclicBarrier和CountDownLatch。
  • Semaphore : 信号量,用于控制线程同步。
  • Exchanger : 交换器,用于两个线程交换数据。

CountDownLatch  

CountDownLatch 一个或多个线程等待其他线程完成一系列操作后才执行

生活中对应场景:比如运动会起跑用哪个

CyclicBarrier

CyclicBarrier  多个线程互相等待,直到到达同一个同步点,再继续一起执行。适用于多个线程有固定的多步需要执行,线程间互相等待,当都执行完了,在一起执行下一步。

Phaser

cyclicbarrier类似,功能更强。它支持任务在多个点都进行同步,支持动态调整注册任务的数量

Exchanger

Exchanger 可以在两个线程之间交换数据,只能是2个线程,他不支持更多的线程之间互换数据,当线程A调用Exchange对象的exchange()方法后,他会陷入阻塞状态,直到线程B也调用了exchange()方法,然后以线程安全的方式交换数据,之后线程AB继续运行

 Semaphore

Semaphore: 可以控同时访问的线程个数,通过 acquire() 获取一个许可,如果没有就等待,而 release() 释放一个许可比如多个窗口叫号,窗口都忙时,顾客等待,有空闲时,最新等待的被通知

具体实现参考:

java同步器_java同步器有哪三种类型-CSDN博客

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CountDownLatchCyclicBarrierSemaphore都是Java中用于多线程编程的同步工具类,但它们有不同的作用和使用场景。 1. CountDownLatch CountDownLatch(倒计时门闩)是一个同步工具类,它允许一个或多个线程等待其他线程完成操作后再继续执行。CountDownLatch维护了一个计数,初始值为线程数量,线程完成任务后计数减1。当计数为0时,等待线程继续执行。CountDownLatch的主要方法是await()和countDown()。 使用场景:CountDownLatch适用于一组线程等待另一组线程完成操作后再继续执行的场景。比如,主线程等待所有子线程完成初始化后再继续执行。 2. CyclicBarrier CyclicBarrier(循环屏障)是一个同步工具类,它允许一组线程相互等待,直到所有线程都到达某个屏障点后再继续执行。CyclicBarrier的主要方法是await()。 使用场景:CyclicBarrier适用于需要多个线程协同完成某个任务的场景。比如,多个线程同时执行某个操作,需要等待所有线程都执行完后再进行下一步操作。 3. Semaphore Semaphore(信号量)是一个同步工具类,它允许多个线程同时访问某个资源。Semaphore维护了一个许可证数量,线程需要先获取许可证才能访问资源,访问完后释放许可证。Semaphore的主要方法是acquire()和release()。 使用场景:Semaphore适用于需要限制线程数量访问某个资源的场景。比如,数据库连接池限制同时访问连接的线程数量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值