本站首页    管理页面    写新日志    退出


«December 2025»
123456
78910111213
14151617181920
21222324252627
28293031


公告
本博客在此声明所有文章均为转摘,只做资料收集使用。并无其他商业用途。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:210
评论数量:205
留言数量:-19
访问次数:931083
建立时间:2007年5月10日




[J2SE相关]JDK1.5新特性--java.util.concurrent Semaphore(7)
文章收藏,  网上资源,  软件技术,  电脑与网络

李小白 发表于 2007/7/19 9:59:46

lhwork 发表于 2006-12-11 11:06:13 操作系统的信号量是个很重要的概念,在进程控制方面都有应用。Java并发库的Semaphore可以很轻松完成信号量控制,Semaphore可以控制某个资源可被同时访问的个数,acquire()获取一个许可,如果没有就等待,而release()释放一个许可。比如在Windows下可以设置共享文件的最大客户端访问个数。 Semaphore维护了当前访问的个数,提供同步机制,控制同时访问的个数。在数据结构中链表可以保存“无限”的节点,用Semaphore可以实现有限大小的链表。另外重入锁ReentrantLock也可以实现该功能,但实现上要负责些,代码也要复杂些。 下面的Demo中申明了一个只有5个许可的Semaphore,而有20个线程要访问这个资源,通过acquire()和release()获取和释放访问许可。 package concurrent;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Semaphore;public class TestSemaphore {  public static void main(String[] args) {    // 线程池    ExecutorService exec = Executors.newCachedThreadPool();    // 只能5个线程同时访问    final Semaphore semp = new Semaphore(5);    // 模拟20个客户端访问    for (int index = 0; index < 20; index++) {      final int NO = index;      Runnable run = new Runnable() {        public void run() {          try {            // 获取许可            semp.acquire();            System.out.println("Accessing: " + NO);            Thread.sleep((long) (Math.random() * 10000));            // 访问完后,释放            semp.release();          } catch (InterruptedException e) {          }        }      };      exec.execute(run);    }    // 退出线程池    exec.shutdown();  }} 运行结果:Accessing: 0Accessing: 1Accessing: 2Accessing: 3Accessing: 4Accessing: 5Accessing: 6Accessing: 7Accessing: 8Accessing: 9Accessing: 10Accessing: 11Accessing: 12Accessing: 13Accessing: 14Accessing: 15Accessing: 16Accessing: 17Accessing: 18Accessing: 19


阅读全文(1975) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 1.430 second(s), page refreshed 144814935 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号