本文主要是介绍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()方法,然后以线程安全的方式交换数据,之后线程A和B继续运行
Semaphore
Semaphore: 可以控同时访问的线程个数,通过 acquire() 获取一个许可,如果没有就等待,而 release() 释放一个许可; 比如多个窗口叫号,窗口都忙时,顾客等待,有空闲时,最新等待的被通知
具体实现参考:
java同步器_java同步器有哪三种类型-CSDN博客
这篇关于Java 同步器 CountDownLatch、CyclicBarrier 、Phaser、Exchanger、Semaphore的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!