2019独角兽企业重金招聘Python工程师标准>>>

一个计数信号量。从概念上讲,信号量维护了一个许可集合。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore 只对可用许可的号码进行计数,并采取相应的行动。
Semaphore 通常用于限制可以访问某些资源(物理或逻辑的)的线程数目。例如,下面的类使用信号量控制对内容池的访问:
这里是一个实际的情况,大家排队上厕所,厕所只有两个位置,来了10个人需要排队。

package com.lzs.concurrent;import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;/*** Created by zaish on 2016-4-4.*/
public class MySemaphore extends Thread{private Semaphore position;private int id;public MySemaphore(int i,Semaphore s){this.id=i;this.position=s;}@Overridepublic void run() {try {if(position.availablePermits()>0){System.out.println("顾客["+this.id+"]进入厕所,有空位");}else{System.out.println("顾客["+this.id+"]进入厕所,没空位,排队");}position.acquire();System.out.println("顾客["+this.id+"]获得坑位");Thread.sleep(1000);System.out.println("顾客["+this.id+"]使用完毕");position.release();} catch (InterruptedException e) {e.printStackTrace();}}public static void main(String[] args) {ExecutorService executorService= Executors.newCachedThreadPool();Semaphore semaphore=new Semaphore(2);for(int i=0;i<4;i++){executorService.submit(new MySemaphore(i,semaphore));}executorService.shutdown();semaphore.acquireUninterruptibly(2);System.out.println("使用完毕,需要清扫了");semaphore.release(2);}
}

转载于:https://my.oschina.net/firstBlooded/blog/652394

Semaphore信号量相关推荐

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

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

  2. Java并发编程中级篇(一):使用Semaphore信号量进行并发控制

    2019独角兽企业重金招聘Python工程师标准>>> Semaphore是一个二进制信号量,只有0和1两个值.如果线程想要访问一个共享资源,它必须先获得信号量.如果信号量的内部计数 ...

  3. pthread-win32 semaphore信号量总结

    最近的多线程 想实现这样的功能: 多线程Socket获得的数据 对其进行某种处理FuncA,但是FuncA比较耗时,希望能够单独独立出来,这样 接受和处理数据分开,但是FuncA处理数据不能放入一个线 ...

  4. Java Semaphore 信号量

    Java Semaphore 信号量 Semaphore 是一种基于计数的信号量.它可以设定一个阈值,基于此,多个线程竞争获取许可信号,做完自己的申请后归还,超过阈值后,线程申请许可信号将会被阻塞.S ...

  5. Linux 信号量 源码,一文读懂go中semaphore(信号量)源码

    运行时信号量机制 semaphore 前言 最近在看源码,发现好多地方用到了这个semaphore. 本文是在go version go1.13.15 darwin/amd64上进行的 作用是什么 下 ...

  6. Java并发编程笔记之Semaphore信号量源码分析

    JUC 中 Semaphore 的使用与原理分析,Semaphore 也是 Java 中的一个同步器,与 CountDownLatch 和 CycleBarrier 不同在于它内部的计数器是递增的,那 ...

  7. python并发编程之semaphore(信号量)_浅谈Python并发编程之进程(守护进程、锁、信号量)...

    前言:本博文是对Python并发编程之进程的知识延伸,主要讲解:守护进程.锁.信号量. 友情链接: 一.守护进程(daemon) 1.1 守护进程概念 首先我们都知道:正常情况下,主进程默认等待子进程 ...

  8. Linux系统编程:使用semaphore信号量和mutex互斥量实现多个生产者和消费者模型

    代码实现 如题,使用semaphore信号量和mutex互斥量实现多个生产者和消费者模型.本来是想只用信号量实现生产者消费者模型的,但是发现 只能在一个生产者和一个消费者之间,要在多个生产者和消费者模 ...

  9. 同步工具之Semaphore信号量

    Semaphore可以理解为信号量,用于控制资源能够被并发访问的线程数量,以保证多个线程能够合理的使用特定资源.Semaphore就相当于一个许可证,线程需要先通过acquire()方法获取该许可证, ...

  10. java控制并发数量_Java并发编程中级篇(二):使用Semaphore信号量进行多个资源并发控制...

    上一节中我们使用了Semaphore信号量保护共享资源,但是它只能保护一个共享资源,当我们需要同时保护多个共享资源的时候,我们只需要在创建信号量的时候使用new Semaphore(int)构造方法, ...

最新文章

  1. 关于雅可比迭代的Python实现
  2. Karma和Jasmine自动化单元测试
  3. java 接口 安全加密_Java中的安全加密
  4. git-下载与安装windows版本与linux版本
  5. python基础for循环和while循环(十)
  6. c语言乘法除法结合律,有关C语言运算符优先级和结合律的思考
  7. MATLAB常用代码(完结)
  8. BAT机器学习面试1000题系列(第1~305题)
  9. 测试鼠标点击速度软件编程,怎么测试鼠标自动点击速度
  10. 矩阵理论 期末判断题汇总
  11. RabbitMQ学习总结(一)
  12. python随机数生成代码_Python随机数生成器小白使用大全
  13. 新手学PS要怎么起步?
  14. 建行u盾单片机可以再次使用吗_Si7021建行U盾19264液晶制作温湿度显示,实物单片机代码开源...
  15. 微信网页版前端源码分析(一)源码结构和公众号处理逻辑
  16. jsp_02JSP隐含对象
  17. ESP32-CAM+PIR传感器=动作抓拍监控
  18. Mysql Remark
  19. 支持免费试用的香港云服务器推荐
  20. 根据空间中不共面的四个点坐标,求构成任意四面体的内外球

热门文章

  1. Microsoft Lync Server 2013 协议路由
  2. php去掉字符串的最后一个字符
  3. 从电影死亡笔记看商业智能在治安领域的应用
  4. Vue指令v-for之遍历输出JavaScript数组,json对象的几种方式
  5. 以太坊又一次大拥堵何去何从?深度对话美图以太坊DPoS算法实现团队
  6. 使用Masonry实现UILabel和UIIMageView自适应长度居中
  7. 成都Uber优步司机奖励政策(1月7日)
  8. 在巴塞罗那,华为挥别昨日 | MWC 2019
  9. SqlServer 数据库 建立子账号
  10. F5内网大二层负载均衡业务访问故障解析(CISCO OTV+LISP-MTU问题导致)