- 浏览: 579514 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (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 11420spring中的配置文件定义的 dtd,xsd等文件默认是从 ... -
java 使用xsl 将xml 转换为 html
2011-12-16 16:16 3009原文:http://www.rgagnon.com/javad ... -
java nio 的一个简单例子:拷贝文件
2011-11-18 16:32 3520下面是java中的nio一个例子,拷贝文件 通过 ... -
以小见大,一段简单的多线程代码
2011-11-01 14:54 1688下面是一段简单的ja ... -
Java NIO原理和使用
2011-10-31 16:52 1174原文:http://www.jspcn.net/h ... -
在 Linux 平台下使用 JNI-转
2011-10-14 16:30 930原文:http://www.ibm.com/dev ... -
java国际化基础
2011-08-26 14:02 1436java国际化主要涉及2个 ... -
java中一些基础却又非常重要,容易忽略的小知识
2011-06-23 21:29 1173java基础非常重要,最近一段时间面试碰到的问题,现在做了个总 ... -
java理论与实践:流行的原子
2011-04-25 17:30 1071原文:https://www.ibm.com/develope ... -
ReadWriteLock用法
2011-04-16 18:56 18549对象的方法中一旦加入synchronized修饰 ... -
java 多线程 CountDownLatch用法
2011-04-14 11:13 15623CountDownLatch,一个同步辅助类,在完成一组正在其 ... -
JTable的列宽与内容的自适应--转
2011-03-14 23:16 4927JTable的列宽与内容的自适应JTable默认的各列宽度平均 ... -
java监听组合键
2011-03-14 22:41 1410监听普通ctrl+c的代码 public void keyP ... -
java日期加减运算-转
2011-03-14 11:42 1414原文链接 http://www.blogjava.net/wi ... -
java classloader动态加载类
2011-02-24 23:18 4391一般的class都是由系统 ... -
java反射机制 入门 理解
2011-02-24 13:31 1777一、java中生成对象的方式,本人所能想到的有以下几种(以 c ... -
自己写的一个beanutil,超简单,超实用
2011-02-24 13:11 1754自己写的一个beanutil,支持动态调用,主要运用了反射,代 ...
相关推荐
在C#编程中,Semaphore类是线程同步和并发控制的重要工具,主要用于限制对特定资源的并发访问。在这个实例中,我们关注的是如何利用Semaphore来管理多线程对多个端口的访问,确保不会出现冲突。Semaphore类可以看作...
Semaphore是一种计数信号量,它可以有正整数值,用于管理多个线程对公共资源的访问。当信号量的值为正时,线程可以获取一个许可(或称资源),然后继续执行;当值为零时,线程会被阻塞,直到其他线程释放一个许可。...
Semaphore是Java并发编程中的一种重要工具,主要用于控制并发线程的访问权限,实现限流或资源的互斥访问。在高并发场景下,Semaphore能够有效地防止过多的线程同时访问共享资源,从而避免系统资源耗尽,提高系统性能...
本文将详细介绍 Semaphore 的工作原理、使用方法以及如何在实际项目中应用它。 Semaphore 是Java并发编程中实现信号量机制的重要工具。它通过维护一个许可集来控制同时访问特定资源的线程数量,从而避免资源竞争和...
Semaphore是Java并发编程中的一种重要工具,它是一个计数信号量,可以用来限制对共享资源的访问权限。在Java的`java.util.concurrent`包中,Semaphore类提供了对多个线程并发访问控制的能力,允许我们设置一个固定的...
Java中的Semaphore是一个并发控制工具,属于java.util.concurrent包下的一个类,它的主要作用是限制对共享资源的访问权限,以实现多线程环境中的同步和限流。Semaphore类提供了信号量的概念,允许我们设定一个固定的...
它主要用于控制对特定资源的并发访问,确保资源得到合理的使用。Semaphore维护了一组虚拟的许可,其数量在创建时由用户指定。在访问资源之前,线程需要调用`acquire()`方法获取许可,如果当前许可数量为0,则线程会...
Semaphore,中文可译为信号量,起源于操作系统中的同步原语,用于协调多个线程对共享资源的访问。它维护了一个计数器,该计数器表示可用许可证的数量。当线程请求许可证时,如果计数器不为零,则会减少一个并允许...
Semaphore,顾名思义,是一个信号量,它用于控制对共享资源的访问权限。Semaphore维护了一个许可计数,当计数大于0时,线程可以获取一个许可并继续执行;当计数为0时,线程会被阻塞,直到其他线程释放许可。...
Semaphore是Java并发编程中的一种重要同步工具,它来源于操作系统中的信号量概念,主要用于限制对共享资源的并发访问数量。在Java中,Semaphore类位于`java.util.concurrent`包下,提供了控制多个线程对公共资源访问...
在Java中,Semaphore类提供了对并发线程进行计数的许可管理,允许我们限制同时访问特定资源的线程数量。这在处理并发任务时非常有用,例如限制数据库连接池的大小、限制同时访问硬件设备的数量或者限制某个服务的...
Semaphore(信号量)是一种广泛应用于控制对特定资源的线程访问数的工具。它基于许可的概念,允许多个线程在限制下同时访问资源,非常适合于实现资源池或限流机制。例如,在Hystrix的限流实现中就有基于信号量的方法...
Java并发库Semaphore可以很轻松完成信号量掌握,Semaphore可以掌握某个资源可被同时访问的个数,通过acquire()猎取一个许可,假如没有就等待,而release()释放一个许可。 例如,在Windows下可以设置共享文件的最大...
Semaphore是并发编程中的一个同步工具类,主要用于控制对共享资源的访问权限,它在多线程环境下起到流量控制的作用。在Kotlin中,Semaphore可以很好地帮助我们管理线程的并发数量,防止过多线程同时访问有限的资源,...
`Semaphore`类是一个系统提供的同步机制,用于控制同时访问特定资源的线程数量。在这个场景中,它被用来管理异步下载请求,确保系统不会因过多的并发下载而过载。 `Semaphore`类有两个关键参数:`initialCount`和`...
例如,CountDownLatch可以用于确保所有参与者准备好后再开始一个活动,Semaphore可以限制并发访问特定资源的线程数量,而Exchanger则可以在多个线程之间进行精确的数据交换。了解和熟练使用这些并发工具类,能显著...
在Java并发编程中,Semaphore是一种重要的同步工具类,它提供了对有限资源的访问控制,能够有效地管理和限制同时访问特定资源的线程数量。Semaphore在Java 5中被引入,是java.util.concurrent包的一部分,它是基于...
Semaphore是Java并发编程中的一种重要工具,用于控制对有限资源的访问权限,它可以理解为一种计数信号量。与独占锁ReentrantLock不同,Semaphore允许多个线程同时访问同一资源,但会限制同时访问的数量。在Java中,...
3. 释放:完成对共享资源的操作后,使用“释放互斥体”释放锁,允许其他线程获取。 4. 销毁:当不再需要原子锁时,使用“销毁互斥体”释放资源。 ### 许可区(Semaphore) 许可区,又称为信号量,比原子锁提供了更...
信号量(Semaphore)是Java并发库中的一种工具类,它提供了一种控制多个线程对共享资源访问的方式,从而实现高级别的同步。在Java 5引入并发包`java.util.concurrent`后,信号量作为`Semaphore`类被添加,成为并发...