Semaphore构造和常用方法:

Semaphore s = new Semaphore(10); //Semaphore构造方法传入一个初始可用数
s.acquire(n);  // s.acquire();  不传n表示获取一个可用
s.release(n); //  s.release(); 不传n表示释放一个可用
s.availablePermits(); // 获取可用的数量,这是个异步方法
s.drainPermits(); // 清空所有可用,相当于来了个大boss,说我把剩下的房间全包了
s.getQueueLength(); // 获取队列中(等待中)的线程数量

信号量的作用是相当于在多个线程之间通信。

下面用酒店定房间的例子来说明用法:

/*** 预定旅店的例子* 一个旅店只有10个房间,有10起预定的请求,每个请求随机订2-5间*/
public class SemaphoreHotel {private static Semaphore s = new Semaphore(10); // 旅店有10个房间static class HotelTask implements Runnable {@Overridepublic void run() {int n = (2 + (int) (Math.random() * (5- 2))) ;  //2-5间try {s.acquire(n); // 预定n个房间,别人就不能预定了Thread.sleep(10);System.out.println(Thread.currentThread().getName() + "占用房间数" + n+",可用房间数"+s.availablePermits());long l = (2 + (int) (Math.random() * (5 - 2))) * 1000;System.out.println(Thread.currentThread().getName() + "占用时长" + l);TimeUnit.MILLISECONDS.sleep(l); // 比Thread.sleep()更人性化吧} catch (InterruptedException e) {e.printStackTrace();} finally {s.release(n); // 释放3个房间System.out.println(Thread.currentThread().getName() + "释放房间数" + n+",可用房间数"+s.availablePermits());}}}public static void main(String[] args) {ExecutorService pool = Executors.newCachedThreadPool();for (int i = 0; i < 10; i++) {pool.execute(new HotelTask());}pool.shutdown();}
}

线程池和信号量模拟酒店(旅店)预定房间相关推荐

  1. python3 信号量和线程池 semaphore ThreadPollExector

    信号量 其实本质上是锁,Lock是单锁,信号量是指定多把锁,也就是说通过信号量指定多个数线程可以访问相同资源,一般情况下读操作可以有多个,但写操作同时只有一个 信号量模块 semaphore 使用起来 ...

  2. 【Linux】生产者消费者编程实现-线程池+信号量

    生产者消费者编程实现,采用了线程池以及信号量技术. 线程的概念就不多说,首先说一下多线程的好处:多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞 ...

  3. Hystrix面试 - 深入 Hystrix 线程池隔离与接口限流

    Hystrix面试 - 深入 Hystrix 线程池隔离与接口限流 前面讲了 Hystrix 的 request cache 请求缓存.fallback 优雅降级.circuit breaker 断路 ...

  4. 【Linux入门】多线程(线程概念、生产者消费者模型、消息队列、线程池)万字解说

    目录 1️⃣线程概念 什么是线程 线程的优点 线程的缺点 线程异常 线程异常 Linux进程VS线程 2️⃣线程控制 创建线程 获取线程的id 线程终止 等待线程 线程分离 3️⃣线程互斥 进程线程间 ...

  5. 多线程-使用大全 基础使用 / 锁 / 线程池 / 原子类 / 并发包 / CAS / AQS (2022版)

    一.多线程描述 1.什么是cpu CPU的中文名称是中央处理器,是进行逻辑运算用的主要由运算器.控制器.寄存器三部分组成, 运算器:从字面意思看就是运算就是起着运算的作用, 控制器:就是负责发出cpu ...

  6. 从构建分布式秒杀系统聊聊线程池

    前言 从0到1构建分布式秒杀系统案例的代码已经全部上传至码云,文章也被分发到各个平台.其中也收到了不少小伙伴喜欢和反馈,有网友如是说: 说实话,能用上的不多,中小企业都不可能用到,大型企业也不是一个人 ...

  7. hystrix 源码 线程池隔离_基于hystrix的线程池隔离

    hystrix进行资源隔离,其实是提供了一个抽象,叫做command,就是说,你如果要把对某一个依赖服务的所有调用请求,全部隔离在同一份资源池内 对这个依赖服务的所有调用请求,全部走这个资源池内的资源 ...

  8. java自定义线程池池,线程池使用及自定义线程池

    一 案例引申 编写代码同时只允许五个线程并发访问(以下文的函数为例子) private static void method() { System.out.println("ThreadNa ...

  9. 【Windows】线程漫谈——线程同步之信号量和互斥量

    本系列意在记录Windwos线程的相关知识点,包括线程基础.线程调度.线程同步.TLS.线程池等 信号量内核对象 信号量内核对象用来进行资源计数,它包含一个使用计数.最大资源数.当前资源计数.最大资源 ...

最新文章

  1. CacheHelper
  2. ICA(独立成分分析)笔记
  3. application.yml如何显示成小叶子图标
  4. MooTools Class 使用、继承详解
  5. Kinect实现简单的三维重建
  6. C#基础系列——语法
  7. Cisco服务器怎么安装系统,CISCO服务器Linux系统安装步骤
  8. Android自定义对话框(Dialog)位置,大小
  9. 一个 8 岁的“前端老人”
  10. (转)Android之发送短信的两种方式
  11. SDWebImage的简单使用
  12. pyhon基础(一)
  13. 电子工程师私藏的一个网站
  14. 爬取千库网ppt_Python——如何实现千图成像:初级篇(从图片爬取到图片合成)...
  15. Java设计模式之工厂模式最详解(类图+源码)
  16. 四个月备考计算机考研,这些考研走心建议帮你度过剩下的四个月
  17. 四、ARDUINO UNO开发板介绍
  18. Energy Vault宣布完成1亿美元C轮融资
  19. 用安卓手机搭建一个可用渗透测试环境/安卓手机搭建linux环境
  20. 苹果手机自带软件删除了怎么恢复_苹果手机数据被删除如何来恢复数据???...

热门文章

  1. java中compliant是什么意思,compliant是什么意思中文翻译
  2. 智慧建筑行业创业机会分析
  3. word press html,wordpress广告插件24款 管理网站广告代码很方便
  4. mars3d学习-方量分析
  5. 职场“女神”,绝不会有的12个习惯
  6. python123基本数据类型有哪些_python的基本数据类型
  7. 征途服务器维护后可以判国家吗,12月22日全服更新维护公告
  8. 第二天就能练起来的技能:真北直播回顾,及KOL讲师、海报设计师招募
  9. 特异性敏感性的意义_敏感性特异性和有意义的分类
  10. java分页爬取站长素材的图片