Java Concurrent 并发支持

atomic包

轻量级无锁原子同步工具包,提供多个原子型基本数据结构封装(AtomicBoolean、AtomicInteger等),用于支持原子级别的线程安全读写,适用于全局状态共享同步。


CountDownLatch

倒计数阻塞器,初始数字倒计到 0 时,被其阻塞的线程将被放行并继续工作,主要用于主线程需要等待多个子线程执行完毕并返回结果的场景。

CountDownLatch 变量通常存在于主线程对象内。
CountDownLatch 只能一次性使用,倒计数到达 0 时,CountDownLatch 对象将永久失去阻塞效果。

主要方法

  • await():阻塞当前线程(通常为主线程)
  • countDown():初始数字减少 1 (代表其中一项子线程执行完毕)

CyclicBarrier

环形阻拦器,初始数字倒计到 0 时,所有被阻塞的线程将被同时放行并开始工作,主要用于多个线程需要等待同一时刻并发执行的场景。

CyclicBarrier 变量通常被所有阻塞线程共享。
CyclicBarrier 可重复使用,初始数字倒计到 0 时再次调用 await() 方法,初始数字将回归原始状态并进入新一轮阻塞过程。
CyclicBarrier 在功能上可与 CountDownLatch 交换使用。

主要方法

  • await():当前线程加入到阻塞列表,初始数字减少 1 (表示其中一项子线程准备就绪)

Semaphore

信号量,用于设置定量的许可数量,通过获取、释放许可的方式,控制可同时执行的线程数量(并发数控制)。

主要方法

  • acquire():获取执行许可权限,未得到许可前当前线程将被阻塞
  • tryAcquire():非阻塞式获取执行许可,未得到许可将立即返回 false
  • release():释放许可权限,回收到权限池

参考:

Java 并发之 CountDownLatch、CyclicBarrier 和 Semaphore

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容