semaphore java_java Semaphore
Semaphore简介
Semaphore是一种基于计数的信号量。它可以设定一个阈值,基于此,多个线程竞争获取许可信号,做自己的申请后归还,超过阈值后,线程申请许可信号将会被阻塞。Semaphore可以用来构建一些对象池,资源池之类的,比如数据库连接池,我们也可以创建计数为1的Semaphore,将其作为一种类似互斥锁的机制,这也叫二元信号量,表示两种互斥状态。它的用法如下:
availablePermits函数用来获取当前可用的资源数量
wc.acquire(); //申请资源
wc.release();// 释放资源
public Semaphore(int permits,boolean fair)
permits:初始化可用的许可数目。
fair: 若该信号量保证在征用时按FIFO的顺序授予许可,则为true,否则为false;
例子
餐厅2个座位,但是有3个人要等位就餐
public class SemaphoreThread extends Thread {
private String name;
private Semaphore semaphore;
public SemaphoreThread(String name, Semaphore semaphore) {
this.name = name;
this.semaphore = semaphore;
}
@Override
public void run() {
if (semaphore.availablePermits() <= 0) {
System.out.println(name + "等位中。。。");
}
try {
semaphore.acquire();
System.out.println(name + "开始就餐了。。");
Thread.sleep(new Random().nextInt(1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(name + "吃完了。。");
semaphore.release();
}
}
请求:
@RequestMapping("test-semaphore")
public void testSemaphore() {
Semaphore semaphore = new Semaphore(2);
for (int i = 1; i <= 3; i++) {
new SemaphoreThread("第" + i + "个人", semaphore).start();
}
}
结果:
第1个人开始就餐了。。
第2个人开始就餐了。。
第3个人等位中。。。
第1个人吃完了。。
第3个人开始就餐了。。
第2个人吃完了。。
第3个人吃完了。。
semaphore java_java Semaphore相关推荐
- 线程 信号量 java_JAVA多线程-Semaphore信号量
一.概述 Semaphore(信号量) 是一个线程同步结构,用于在线程间传递信号,以避免出现信号丢失,或者像锁一样用于保护一个关键区域,可以控制同时访问的线程个数,并且通过acquire()方法获取一 ...
- Java并发编程之CountDownLatch、CyclicBarrier和Semaphore
前言 本文为对CountDownLatch.CyclicBarrier.Semaphore的整理使用 CountDownLatch CountDownLatch类位于java.util.concurr ...
- 15.并发工具类(解析hashtable,ConcurrentHashMap1.7与1.8的区别以及Semaphore)
3. 并发工具类 3.1 并发工具类-Hashtable Hashtable出现的原因:在集合类中HashMap是比较常用的集合对象,但是HashMap在多线程环境下可能会出现线程不安全的情况,为了保 ...
- Semaphore(信号量)
Semaphore是什么 Semaphore通常我们叫它信号量,可以用来控制同时访问特定资源的线程数量,通过协调各个线程,以保证合理的使用资源. 使用场景 通常用于哪些资源有明确访问数量限制的场景,常 ...
- OMG!Semaphore里面居然有这么一个大坑!
作者 | why技术 来源 | why技术(ID:hello_hi_why) 荒腔走板 上周写了一篇文章,一不小心戳到了大家的爽点,其中一个转载我文章的大号,阅读量居然突破了 10w+,我也是受宠若惊 ...
- Java Semaphore实现线程池任务调度
2019独角兽企业重金招聘Python工程师标准>>> 关于Semaphore举例 以一个停车场运作为例.为了简单起见,假设停车场只有三个车位,一开始三个车位都是空的.这时如果同时来 ...
- java并发编程同步器 Semaphore、CyclicBarrier、Exchanger、CountDownLatch
为什么80%的码农都做不了架构师?>>> 一.Semaphore(信号量) 注解:信号量,其实就是定义一定的数量,只有释放一个才能进去下一个,其余都得进入等待状态.比如有2个洗 ...
- 面试官:说说Java中的信号量?Semaphore
Semaphore (信号量)是由计算机科学家Dijkstra在1965年提出的,广泛应用不同的操作系统,在管程提出之前信号量就是并发编程领域的霸主!几乎所有并发的语言都支持信号量机制. Semaph ...
- Semaphore信号量
2019独角兽企业重金招聘Python工程师标准>>> 一个计数信号量.从概念上讲,信号量维护了一个许可集合.如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可 ...
最新文章
- SharePoint【Query Options系列】-- Query Options的一些用法 01. 展开用户列信息
- PHP Notice: undefined index 解决方法
- 秒杀系统流量削峰,这事应该怎么做?
- 左神算法:将单链表的每K个节点之间逆序(Java版)
- Harbour.Space Scholarship Contest 2021-2022 F. Pairwise Modulo 逆向思维 + 树状数组
- Properties 持久的属性集
- 人脸识别算法二:Fisherface(LDA)
- Hadoop中mapreduce作业日志是如何生成的
- mysql批量添加报错_技术分享 | MySQL 在批量插入时捕捉错误信息
- iphone双卡双待机型_运营商确认苹果将通过软件更新来让iPhone 12支持双卡5G!
- 计算机应用段落设置,计算机应用操作基础.docx
- linux lsm模块,Linux安全模块LSM研究及改进
- 产品经理业务流程图的绘制流程分享
- 电子商务的核心是不是计算机技术,电子商务的核心内容是网络营销
- ubuntu PyCharm的安装
- mysql小问题集锦
- PCB设计常见的有那些问题
- 为什么游戏盒子源码那么重要?(不搞清楚游戏盒子源码,游戏代理很难顺利)(远离那些免费游戏盒子源码,会变得不幸)
- btb和oto,btc模式是什么意思
- hexo嵌入html传消息的,Hexo添加Toc支持,生成文章目录