- 浏览: 569160 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (200)
- html css (6)
- javascript (11)
- php (6)
- java基础 (18)
- mysql (8)
- ssh (7)
- linux (21)
- 杂想 (1)
- 搜索引擎 (2)
- linux-shell (2)
- perl (61)
- 单元测试 (1)
- jquery (1)
- xml (1)
- 求职招聘 (1)
- 其他 (2)
- 项目工具 (2)
- maven (10)
- ant (1)
- eclipse (3)
- windows (4)
- java (8)
- jsp (1)
- c c++ (7)
- java-web (3)
- 汇编 (1)
- 正则表达式 (2)
- 网络 (1)
- 路由 (1)
- ip (1)
- 测试驱动开发 (1)
- tdd (1)
- vim (1)
- powermock (1)
- junit (1)
- spring (1)
- spring security (1)
- httpclient (1)
- sql (1)
- sqlserver (2)
- 存储过程 (1)
- apache (1)
- Nexus (1)
- 金融 (1)
- clojure (4)
- 函数式编程 (3)
- 工作 (1)
- git (2)
- java 并发 (1)
- python (1)
- java netty proxy (1)
- scala (1)
最新评论
-
springmvc-freemarker:
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...
eclipse 配置maven web项目 -
zk1878:
huzhenyu 写道楼主很用心,讲得十分清楚,非常实用!呵呵 ...
eclipse 配置maven web项目 -
huzhenyu:
楼主很用心,讲得十分清楚,非常实用!
eclipse 配置maven web项目 -
宋建勇:
不错,对CountDownLatch了解加深了!
java 多线程 CountDownLatch用法 -
zk1878:
必须的。。。。
perl下载图片
Semaphore 通常用于限制可以访问某些资源(物理或逻辑的)的线程数目
主要方法
public Semaphore(int permits) //构造一个指定许可数目的信号量
public void acquire()throws InterruptedException // 获取信号量,没有则阻塞当前线程
public void release() //释放一个信号量
另外还有相应的重载方法
例子
以下代码描述了这样一个应用,有2台pc,5个玩家,同一时刻只能有2个玩家使用pc(因为只有2台pc嘛),同一pc同一时刻只能归于一个玩家使用
public class SemaphoreDemo { final static SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public static void main(String[] args) { Semaphore sem=new Semaphore(2); PC[]resources={new PC("PC-I"),new PC("PC-II")}; for(int i=1;i<=5;i++){ Player player=new Player("Player "+i,sem,resources); player.start(); } } static class Player extends Thread{ Semaphore sem; PC[]pcs; String playerName; public Player(String playerName,Semaphore sem,PC[]pcs){ this.sem=sem; this.pcs=pcs; this.playerName=playerName; } public void run(){ PC pc=getPC();//获取pc play(pc);//玩 giveBackPC(pc);//归还pc } private void play(PC pc){ if(pc==null) return; try { System.out.println(playerName+" play game with "+pc.getPcName()+" start at time "+sdf.format(new Date())); Thread.sleep(1000); System.out.println(playerName+" play game with "+pc.getPcName()+" over at time "+sdf.format(new Date())); } catch (InterruptedException e) { e.printStackTrace(); } } private PC getPC(){ try { sem.acquire(); } catch (InterruptedException e) { e.printStackTrace(); return null; } for(PC pc:pcs){ if(!pc.isOccupied()){ pc.setOccupied(true); return pc; } } return null; } private void giveBackPC(PC pc){ if(pc!=null) pc.setOccupied(false); sem.release(); } } static class PC{ private String pcName; private boolean occupied=false; PC(String pcName){ this.pcName=pcName; } public String getPcName() { return pcName; } public void setPcName(String pcName) { this.pcName = pcName; } public synchronized boolean isOccupied() { return occupied; } public synchronized void setOccupied(boolean occupied) { this.occupied = occupied; } } }
输出
Player 1 play game with PC-I start at time 2011-04-14 12:59:49
Player 2 play game with PC-II start at time 2011-04-14 12:59:49
Player 2 play game with PC-II over at time 2011-04-14 12:59:50
Player 3 play game with PC-II start at time 2011-04-14 12:59:50
Player 1 play game with PC-I over at time 2011-04-14 12:59:50
Player 4 play game with PC-I start at time 2011-04-14 12:59:50
Player 4 play game with PC-I over at time 2011-04-14 12:59:51
Player 3 play game with PC-II over at time 2011-04-14 12:59:51
Player 5 play game with PC-I start at time 2011-04-14 12:59:51
Player 5 play game with PC-I over at time 2011-04-14 12:59:52
发表评论
-
java web spring xsd 从 classpath加载
2014-10-04 18:11 11368spring中的配置文件定义的 dtd,xsd等文件默认是从 ... -
java 使用xsl 将xml 转换为 html
2011-12-16 16:16 2975原文:http://www.rgagnon.com/javad ... -
java nio 的一个简单例子:拷贝文件
2011-11-18 16:32 3477下面是java中的nio一个例子,拷贝文件 通过 ... -
以小见大,一段简单的多线程代码
2011-11-01 14:54 1650下面是一段简单的ja ... -
Java NIO原理和使用
2011-10-31 16:52 1129原文:http://www.jspcn.net/h ... -
在 Linux 平台下使用 JNI-转
2011-10-14 16:30 906原文:http://www.ibm.com/dev ... -
java国际化基础
2011-08-26 14:02 1404java国际化主要涉及2个 ... -
java中一些基础却又非常重要,容易忽略的小知识
2011-06-23 21:29 1128java基础非常重要,最近一段时间面试碰到的问题,现在做了个总 ... -
java理论与实践:流行的原子
2011-04-25 17:30 1039原文:https://www.ibm.com/develope ... -
ReadWriteLock用法
2011-04-16 18:56 18505对象的方法中一旦加入synchronized修饰 ... -
java 多线程 CountDownLatch用法
2011-04-14 11:13 15544CountDownLatch,一个同步辅助类,在完成一组正在其 ... -
JTable的列宽与内容的自适应--转
2011-03-14 23:16 4894JTable的列宽与内容的自适应JTable默认的各列宽度平均 ... -
java监听组合键
2011-03-14 22:41 1373监听普通ctrl+c的代码 public void keyP ... -
java日期加减运算-转
2011-03-14 11:42 1383原文链接 http://www.blogjava.net/wi ... -
java classloader动态加载类
2011-02-24 23:18 4361一般的class都是由系统 ... -
java反射机制 入门 理解
2011-02-24 13:31 1740一、java中生成对象的方式,本人所能想到的有以下几种(以 c ... -
自己写的一个beanutil,超简单,超实用
2011-02-24 13:11 1705自己写的一个beanutil,支持动态调用,主要运用了反射,代 ...
相关推荐
Semaphore的使用及其方法的使用。
semaphore完整搭建方案,包括帮助文档、程序源码、可执行程序。按照帮助文档完整搭建可视化ansible部署解决方案
C#语言Semaphore类用法实例,多线程 用于有多个同类型共享资源(比如端口)时,如何协调端口分配给线程访问资源的问题,是一个简单模拟实例(源代码)。
关于Android变成中的信号量semaphore,在使用过程中我们往往搞不清楚其信号量的申请和使用。这里主要针对信号量初始值为零的情况做介绍,其他情况不做讨论。初始值为零的情况较少使用,部分代码中的这个情况往往让...
每个acquire方法阻塞,直到有一个许可证可以获得然后拿走一个许可证;每个release方法增加一个许可证,这可能会释放一个阻塞的acquire方法。然而,其实并没有实际的许可证这个对象,Semaphore只是维持了一个可获得...
semaphore开发源码,ansible可视化部署服务程序,支持界面操作。
目录: 简介 1.1 并发编程与资源控制 ...3.2 使用Semaphore控制资源访问 实现有界资源池 4.1 场景介绍 4.2 使用Semaphore实现有界资源池 Semaphore的公平性 5.1 非公平性 5.2 公平性 最佳实践与注意事项
mutex和semaphore互斥程序实例
Semaphore T-BOX System OverviewPDF,Semaphore T-BOX System Overview
Semaphore 源码解析 通过使用Semaphore可以在高并发场景进行限流控制处理
semaphore控制多线程循序执行,网上 找的例子更改的希望对大家有用
Semaphore:可理解为允许线程执行信号的池子,池子中放入多少个信号就允许多少线程同时执行。 private static void MultiThreadSynergicWithSemaphore() { //0表示创建Semaphore时,拥有可用信号量数值 //1表示...
semaphore-nodejs 在 node.js 中使用 API 的小型客户端库 ##用法 在你的项目中安装 npm > npm install semaphore-sms 用法示例: ...semaphore.send_sms方法用于向 1 到 20 个收件人电话号码发送 SM
在JAVA里面,我的理解是信号计数的作用,比如我想设置只能允许500个线程访问Web...这样就实现了控制的作用,当然这个功能咱们自己通过锁的机制可以自己完成,不过使用Semaphore比较简单、方便,这也是它产生的原因。
Semaphore_TBOX_产品-软件及系统功能
Linux下多线程编程-Pthread与Semaphore的使用.doc
多线程(C++)同步Semaphore
文章目录1 原理简介2 基本使用方法2.1 demo1 — 每次获取一个许可,将线程并发数控制为N个2.2 demo2 — 每次获取多个许可(或者说所有可获取的许可),使线程并发数变为13 其他玩法3.1 demo3 — 尝试获取许可,如果...
计数信号量可用于控制对资源的访问。要获得对资源的控制,任务必须首先获得信号量。因此减少了信号量计数值。当计数值达到零时,将没有可用资源。当任务使用资源完成时,它将“give”信号量,从而增加信号量计数值。
Semaphore进程间通讯测试源码,CreateSemaphoreW,OpenSemaphore,ReleaseSemaphore,WaitForSingleObjectEx