首页 > 其他分享 >并发工具之 Semaphore & CountDownLatch

并发工具之 Semaphore & CountDownLatch

时间:2022-11-06 19:14:33浏览次数:75  
标签:semaphore 池子 并发 state Semaphore CountDownLatch countDownLatch

1. semaphore 是什么?

Semaphore 字面意思是信号量的意思。它的作用是控制访问特定资源的线程数量,底层依赖AQS的状态state,是生产中比较常用的一个工具类。(基于共享模式)

// 信号量
Semaphore semaphore = new Semaphore(5);
// 初始 state的值 = 5,总的容量池子
semaphore.acquire();    // 从总的池子里拿出一个凭据
state-1 = 5 - 1 = 4;

semaphore.acquire(2);  // 一次从池子里面拿出两个凭据
semaphore.release(); // 把票据还回总的池子 state = state + 1 = 4 + 1 = 5;

semaphore.acquireUninterruptibly();  // 中断也不会往外抛出异常。

semaphore.tryAcquire()可以实现超时等待,spring cloud Hystrix 就采用了这种机制。

 

 

 

CountDownLatch

CountDownLatch countDownLatch = new CountDownLatch(2);

countDownLatch.countDown();

countDownLatch.await();

CyclicBarrier

 

 

 Exchanger

两个线程之间交换数据用。

 

End!

标签:semaphore,池子,并发,state,Semaphore,CountDownLatch,countDownLatch
From: https://www.cnblogs.com/zhf123/p/16863393.html

相关文章

  • 线程和进程,并发和并行的区别
    线程和进程计算机教材上的经典定义如下:线程是操作系统调度的基本单位;进程是操作系统资源分配的基本单位。线程和进程属于一个抽象的概念,具体实现还得看具体的操作系统......
  • 缓存穿透、缓存并发、缓存失效之思路变迁
    我们在用缓存的时候,不管是Redis或者Memcached,基本上会通用遇到以下三个问题:缓存穿透缓存并发缓存失效一、缓存穿透 Paste_Image.png Paste_Image......
  • 【分布式技术专题】「架构实践于案例分析」盘点高并发场景的技术设计方案和规划
    高并发是什么?⾼并发(HighConcurrency)是互联⽹分布式系统架构设计中必须考虑的因素之⼀,它通常是指通过设计保证系统能够同时并⾏处理很多请求。高并发属性和因素⾼并发相关常......
  • 【分布式技术专题】「架构实践于案例分析」盘点高并发场景的技术设计方案和规划
    自知之明是最难得的知识。高并发是什么?⾼并发(HighConcurrency)是互联⽹分布式系统架构设计中必须考虑的因素之⼀,它通常是指通过设计保证系统能够同时并⾏处理很多请求。高并......
  • 基础JUC高并发编程-尚硅谷
    JUC高并发编程B站地址:【尚硅谷】大厂必备技术之JUC并发编程_哔哩哔哩_bilibili参考笔记1:(119条消息)【尚硅谷】大厂必备技术之JUC并发编程——笔记总结_浙桐的博客-CSD......
  • Jenkins部署服务后健康检测并发企业微信通知
    Jenkins部署服务后健康检测并发企业微信通知背景:Jenkins部署开发环境后,希望能将部署后的服务是否健康通知到企业微信中。解决方案使用构建触发器、健康检测url、企业微......
  • JAVA并发容器-ConcurrentLinkedQueue 源码分析
    在并发编程中,有时候需要使用线程安全的队列。如果要实现一个线程安全的队列有两种方式:一种是使用阻塞算法,另一种是使用非阻塞算法。使用阻塞算法的队列可以用一个锁(入队和......
  • JAVA并发容器-ConcurrentSkipListMap,ConcurrentSkipListSet
    ConcurrentSkipListMap其实是TreeMap的并发版本。TreeMap使用的是红黑树,并且按照key的顺序排序(自然顺序、自定义顺序),但是他是非线程安全的,如果在并发环境下,建议使用Concurre......
  • JAVA并发容器-写时复制容器
    写时复制的容器。通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将......
  • 并发情况如何提升同步代码块的性能
    使用并发编程的目标是为了提升系统性能,引入多线程后,其实会引入额外的开销,如线程之间的协调、增加的上下文切换,线程的创建和销毁,线程的调度等等。过度或不恰当的使用,可能会导......