java并发工具包:Semaphore的用法
来源:互联网 发布:淘宝详情页尺寸790 编辑:程序博客网 时间:2024/06/06 22:36
Semaphore的作用说白了就是限制目标资源在原子操作中允许的线程数量。直接上例子:
package test;import java.util.concurrent.Semaphore;/** * @author 作者 peng.tu * @version 创建时间:2015年9月8日 */public class MyTest {/** * 模仿用户去银行取钱的业务,假设同时有6个用户来银行取钱,而银行只有2台取款机(最多只有两个人在取钱) * * new Semaphore(Integer num); 中num的值默认是1,当指定具体的值时,则说明同时最多只允许num的线程请求资源 * * @param args */public static void main(String[] args) {Semaphore semaphore = new Semaphore(2);//假设有两个窗口提供服务new Thread(new Person(semaphore, "A")).start();new Thread(new Person(semaphore, "B")).start();new Thread(new Person(semaphore, "C")).start();new Thread(new Person(semaphore, "D")).start();new Thread(new Person(semaphore, "E")).start();new Thread(new Person(semaphore, "F")).start();}}class Person implements Runnable {private Semaphore semaphore;private String name;public Person(Semaphore semaphore, String name) {this.semaphore = semaphore;this.name = name;}@Overridepublic void run() {System.out.println(name + "用户正在排队...");try {semaphore.acquire();//锁住资源System.out.println(name + "用户正在取钱...");Thread.sleep(1500);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(name + "用户已经完成交易...");semaphore.release();//取款完成,释放资源}}
运行结果可以看出,用户一直都是只有两个人在取钱,而其他用户则是处在排队状态:
B用户正在排队...A用户正在排队...A用户正在取钱...B用户正在取钱...C用户正在排队...E用户正在排队...D用户正在排队...F用户正在排队...A用户已经完成交易...B用户已经完成交易...C用户正在取钱...E用户正在取钱...E用户已经完成交易...C用户已经完成交易...D用户正在取钱...F用户正在取钱...D用户已经完成交易...F用户已经完成交易...
1 0
- java并发工具包:Semaphore的用法
- java 并发工具包 -信号量 Semaphore
- Java并发编程中Semaphore的用法
- Java并发工具包——CountDownLatch / Java并发工具包——CyclicBarrier / Java并发工具包——Semaphore / Java并发工具包——Exchanger
- java并发:Semaphore 的使用
- Java并发之Semaphore的源码分析
- 【Java并发编程】01.Semaphore的使用
- JAVA并发信号量 Semaphore
- Java并发同步器--Semaphore
- java并发-Semaphore
- Java并发之Semaphore
- Java并发之Semaphore
- java并发中的Semaphore
- java并发信号量Semaphore
- Java多线程工具包java.util.concurrent---Semaphore
- Java并发工具包学习
- Java 并发工具包
- Java 并发工具包
- 百万级访问网站前期的技术准备
- C#委托delegate
- 常用的linux命令
- IntelliJ IDEA 主题、字体、编辑区主题、文件编码修改
- LeetCode Partition List
- java并发工具包:Semaphore的用法
- oracle 在有数据的前提下变更字段类型
- SourceTree的使用
- 关于一个大型web系统架构设计和技术选型的讨论摘录
- iOS开发笔记--宏定义的黑魔法 - 宏菜鸟起飞手册
- HDU【1166】敌兵布阵
- MAC中设置android adb环境变量
- 如何使用Log
- Nodejs学习路线图