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相关推荐

  1. 线程 信号量 java_JAVA多线程-Semaphore信号量

    一.概述 Semaphore(信号量) 是一个线程同步结构,用于在线程间传递信号,以避免出现信号丢失,或者像锁一样用于保护一个关键区域,可以控制同时访问的线程个数,并且通过acquire()方法获取一 ...

  2. Java并发编程之CountDownLatch、CyclicBarrier和Semaphore

    前言 本文为对CountDownLatch.CyclicBarrier.Semaphore的整理使用 CountDownLatch CountDownLatch类位于java.util.concurr ...

  3. 15.并发工具类(解析hashtable,ConcurrentHashMap1.7与1.8的区别以及Semaphore)

    3. 并发工具类 3.1 并发工具类-Hashtable Hashtable出现的原因:在集合类中HashMap是比较常用的集合对象,但是HashMap在多线程环境下可能会出现线程不安全的情况,为了保 ...

  4. Semaphore(信号量)

    Semaphore是什么 Semaphore通常我们叫它信号量,可以用来控制同时访问特定资源的线程数量,通过协调各个线程,以保证合理的使用资源. 使用场景 通常用于哪些资源有明确访问数量限制的场景,常 ...

  5. OMG!Semaphore里面居然有这么一个大坑!

    作者 | why技术 来源 | why技术(ID:hello_hi_why) 荒腔走板 上周写了一篇文章,一不小心戳到了大家的爽点,其中一个转载我文章的大号,阅读量居然突破了 10w+,我也是受宠若惊 ...

  6. Java Semaphore实现线程池任务调度

    2019独角兽企业重金招聘Python工程师标准>>> 关于Semaphore举例 以一个停车场运作为例.为了简单起见,假设停车场只有三个车位,一开始三个车位都是空的.这时如果同时来 ...

  7. java并发编程同步器 Semaphore、CyclicBarrier、Exchanger、CountDownLatch

    为什么80%的码农都做不了架构师?>>>    一.Semaphore(信号量) 注解:信号量,其实就是定义一定的数量,只有释放一个才能进去下一个,其余都得进入等待状态.比如有2个洗 ...

  8. 面试官:说说Java中的信号量?Semaphore

    Semaphore (信号量)是由计算机科学家Dijkstra在1965年提出的,广泛应用不同的操作系统,在管程提出之前信号量就是并发编程领域的霸主!几乎所有并发的语言都支持信号量机制. Semaph ...

  9. Semaphore信号量

    2019独角兽企业重金招聘Python工程师标准>>> 一个计数信号量.从概念上讲,信号量维护了一个许可集合.如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可 ...

最新文章

  1. SharePoint【Query Options系列】-- Query Options的一些用法 01. 展开用户列信息
  2. PHP Notice: undefined index 解决方法
  3. 秒杀系统流量削峰,这事应该怎么做?
  4. 左神算法:将单链表的每K个节点之间逆序(Java版)
  5. Harbour.Space Scholarship Contest 2021-2022 F. Pairwise Modulo 逆向思维 + 树状数组
  6. Properties 持久的属性集
  7. 人脸识别算法二:Fisherface(LDA)
  8. Hadoop中mapreduce作业日志是如何生成的
  9. mysql批量添加报错_技术分享 | MySQL 在批量插入时捕捉错误信息
  10. iphone双卡双待机型_运营商确认苹果将通过软件更新来让iPhone 12支持双卡5G!
  11. 计算机应用段落设置,计算机应用操作基础.docx
  12. linux lsm模块,Linux安全模块LSM研究及改进
  13. 产品经理业务流程图的绘制流程分享
  14. 电子商务的核心是不是计算机技术,电子商务的核心内容是网络营销
  15. ubuntu PyCharm的安装
  16. mysql小问题集锦
  17. PCB设计常见的有那些问题
  18. 为什么游戏盒子源码那么重要?(不搞清楚游戏盒子源码,游戏代理很难顺利)(远离那些免费游戏盒子源码,会变得不幸)
  19. btb和oto,btc模式是什么意思
  20. hexo嵌入html传消息的,Hexo添加Toc支持,生成文章目录

热门文章

  1. oracle核酸主体,oracle ebs 分类账与法人主体对应关系
  2. css如何设置表格行间距为0,css,表格行间距.doc
  3. 实训笔记:Flume基础 Mac Flume基本使用
  4. html5 移动端的手指触屏事件
  5. 为 Mac Terminal 设置proxychains4代理
  6. mysql回滚工具_MySQL回滚工具binlog2sql使用介绍
  7. AARCH64+llvm 编译问题
  8. iptables的mangle表
  9. IP报文格式及各字段意义
  10. 变量的声明、变量的定义、变量的初始化