资料总结 资料总结
首页
go
java
云原生
  • mysql
  • redis
  • MongoDB
  • 设计模式详解
  • 数据结构与算法
  • 前端
  • 项目
  • 理论基础
  • 运营
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

linghui Wu

一只努力学飞的鱼
首页
go
java
云原生
  • mysql
  • redis
  • MongoDB
  • 设计模式详解
  • 数据结构与算法
  • 前端
  • 项目
  • 理论基础
  • 运营
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • java-se

    • java集合
    • 计算机基础
    • 并发编程
    • java线程
    • java协程
    • synchronized
    • Unsafe&Atomic
    • AQS
    • Lock
    • JUC工具杂记
      • API
        • CountDownLatch
      • API
        • CyclicBarrier
      • API
      • 和CountDownLatch的区别
        • Exchanger
      • API
        • 参考资料
    • Queue
    • 线程池原理
    • Future
    • ForkJoin
    • BIO,NIO,AIO
  • jvm

  • mybatis

  • Netty

  • 爬虫 webmagic

  • spring

  • spring-cloud

  • 中间件

  • flowable

  • idea工具

  • maven

  • ms

  • java部署

  • 原生安卓

  • java
  • java-se
wulinghui
2022-02-14
目录

JUC工具杂记

# Semaphore

  • 它的作用是控制访问特定资源的线程数目
  • 需求场景:: 资源访问,服务限流(Hystrix里限流就有基于信号量方式)。
  • public Semaphore(int permits, boolean fair)

# API

  • acquire() 表示阻塞并获取许可
  • tryAcquire(int args,long timeout, TimeUnit unit)表示在有限时间内阻塞并获取许可
  • release() 表示释放许可

# CountDownLatch

  • 能够使一个线程等待其他线程完成各自的工作后再执行
  • 使用场景: Zookeeper分布式锁,Jmeter模拟高并发,开枪起跑
  • CountDownLatch是通过一个计数器来实现的,计数器的初始值为线程的数量。当一个线程完成了自己的任务后,计数器的值就会减1。当计数器值到达0时,表示所有的线程都完成了任务,然后等待的线程就可以恢复执行任务。
  • 注意只能用一次

# API

  • countDown() 减一
  • await() 等待

# CyclicBarrier

  • 栅栏屏障,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。
  • 应用场景: 可以用于多线程计算数据,最后合并计算结果的场景

# API

  • 超时时间的await和不带超时时间的await方法 ,这个await就是屏障点

# 和CountDownLatch的区别

  • CountDownLatch的计数器只能使用一次,而CyclicBarrier的计数器可以使用reset()方法重置,可以使用多次,所以CyclicBarrier能够处理更为复杂的场景;
  • CyclicBarrier还提供了一些其他有用的方法,比如getNumberWaiting()方法可以获得CyclicBarrier阻塞的线程数量,isBroken()方法用来了解阻塞的线程是否被中断;
  • CountDownLatch允许一个或多个线程等待一组事件的产生,而CyclicBarrier用于等待其他线程运行到栅栏位置。

# Exchanger

  • 当一个线程运行到exchange()方法时会阻塞,另一个线程运行到exchange()时,二者交换数据,然后执行后面的程序。
  • 应用场景:: 遗传算法 和 校对工作/对账

# API

  • V exchange(V x) // 在这里等待另一个线程交互数据。
  • V exchange(V x, long timeout, TimeUnit unit)

# 参考资料

Java并发编程之CyclicBarrier详解 (opens new window)

java Exchanger原理 (opens new window)

编辑 (opens new window)
上次更新: 2023/01/24, 15:21:15
Lock
Queue

← Lock Queue→

最近更新
01
架构升级踩坑之路
02-27
02
总结
02-27
03
语法学习
02-27
更多文章>
| Copyright © 2021-2025 Wu lingui |
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式