- 浏览: 571304 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (365)
- Tomcat调优 (2)
- Apache Http (20)
- Webserver安装 (5)
- Linux安装 (28)
- Linux常用命令 (17)
- C语言及网络编程 (10)
- 文件系统 (0)
- Lucene (12)
- Hadoop (9)
- FastDFS (8)
- 报表 (0)
- 性能测试 (1)
- JAVA (18)
- CSharp (3)
- C++ (38)
- BI (0)
- 数据挖掘 (0)
- 数据采集 (0)
- 网址收集整理 (3)
- Resin (0)
- JBoss (0)
- nginx (0)
- 数据结构 (1)
- 随记 (5)
- Katta (1)
- Shell (6)
- webservice (0)
- JBPM (2)
- JQuery (6)
- Flex (41)
- SSH (0)
- javascript (7)
- php (13)
- 数据库 (6)
- 搜索引擎排序 (2)
- LVS (3)
- solr (2)
- windows (1)
- mysql (3)
- 营销软件 (1)
- tfs (1)
- memcache (5)
- 分布式搜索 (3)
- 关注的博客 (1)
- Android (2)
- clucene (11)
- 综合 (1)
- c c++ 多线程 (6)
- Linux (1)
- 注册码 (1)
- 文件类型转换 (3)
- Linux 与 asp.net (2)
- perl (5)
- coreseek (1)
- 阅读器 (2)
- SEO (1)
- 励志 (1)
- 在线性能测试工具 (1)
- yii (7)
- 服务器监控 (1)
- 广告 (1)
- 代理服务 (5)
- zookeeper (8)
- 广告联盟 (0)
- 常用软件下载 (1)
- 架设自已的站点心得 (0)
最新评论
-
terry07:
java 7 用这个就可以了 Desktop desktop ...
关于java Runtime.getRunTime.exec(String command)的使用 -
HSINKING:
怎么设置打开的dos 窗口是指定的路径下
关于java调用bat文件,不打开窗口 -
liubang201010:
hyperic hq更多参考资料,请访问:http://www ...
hyperic-hq -
^=^:
STDIN_FILENO是unistd.h中定义的一个numb ...
深入理解dup和dup2的用法 -
antor:
留个记号,学习了
[转]用java流方式判断文件类型
Semaphore 信号量,就是一个允许实现设置好的令牌。也许有1个,也许有10个或更多。
谁拿到令牌(acquire)就可以去执行了,如果没有令牌则需要等待。
执行完毕,一定要归还(release)令牌,否则令牌会被很快用光,别的线程就无法获得令牌而执行下去了。
请仔细体会里面关于仓库的处理,
1 是如何保证入库时,如果仓库满就等待,
2 出库时,如果仓库无货就等待的。
3 以及对仓库只有10个库位的处理。
4 对同步问题的处理。
发表于 @ 2009年03月17日 11:11:00 | 评论( 4 ) | 编辑| 举报| 收藏
旧一篇:平庸和优秀的距离,我要得不仅仅是土豆 | 新一篇:国内顶级IT公司面试题的答案
查看最新精华文章 请访问博客首页相关文章
生产者消费者问题的java实现有趣的生产者消费者问题老紫竹JAVA提高教程(1)-认识Set集合老紫竹JAVA提高教程(7)-认识List列表之ArrayListQt 多线程学习(1)线程同步Condition Variables JAVA多线程生产者消费者问题——Java方案zhangweiheb 发表于2009年3月17日 22:06:26 IP:举报回复删除
今天上午的操作系统的课也讲到这里了,本来也想用Java写个例子试一下,看来赵老师先把样板写出来了,哈哈...
顺便问一下赵老师,Semaphore 和 synchronize 有什么联系吗?liu251 发表于2010年1月7日 18:49:25 IP:举报回复删除
在有些系统中没有互斥锁mutex原语,只有信号量,此时synchronized的实现是通过semaphore实现的yin_slin 发表于2010年7月23日 17:20:54 IP:举报回复删除
代码很精彩,写出了Semaphore的用途,特别是核心锁的互斥作用,但这段代码性能并不高,生产者和消费者是单线程运作的,没有体现concurrency包的高性能特性
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/java2000_net/archive/2009/03/17/3997449.aspx
谁拿到令牌(acquire)就可以去执行了,如果没有令牌则需要等待。
执行完毕,一定要归还(release)令牌,否则令牌会被很快用光,别的线程就无法获得令牌而执行下去了。
请仔细体会里面关于仓库的处理,
1 是如何保证入库时,如果仓库满就等待,
2 出库时,如果仓库无货就等待的。
3 以及对仓库只有10个库位的处理。
4 对同步问题的处理。
view plaincopy to clipboardprint? 01.import java.util.concurrent.Semaphore; 02./** 03. * 老紫竹JAVA提高教程-信号量(Semaphore)的使用。<br> 04. * 生产者和消费者的例子,库存的管理。 05. * 06. * @author 老紫竹(java2000.net,laozizhu.com) 07. */ 08.public class TestSemaphore { 09. public static void main(String[] args) { 10. // 启动线程 11. for (int i = 0; i <= 3; i++) { 12. // 生产者 13. new Thread(new Producer()).start(); 14. // 消费者 15. new Thread(new Consumer()).start(); 16. } 17. } 18. // 仓库 19. static Warehouse buffer = new Warehouse(); 20. // 生产者,负责增加 21. static class Producer implements Runnable { 22. static int num = 1; 23. @Override 24. public void run() { 25. int n = num++; 26. while (true) { 27. try { 28. buffer.put(n); 29. System.out.println(">" + n); 30. // 速度较快。休息10毫秒 31. Thread.sleep(10); 32. } catch (InterruptedException e) { 33. e.printStackTrace(); 34. } 35. } 36. } 37. } 38. // 消费者,负责减少 39. static class Consumer implements Runnable { 40. @Override 41. public void run() { 42. while (true) { 43. try { 44. System.out.println("<" + buffer.take()); 45. // 速度较慢,休息1000毫秒 46. Thread.sleep(1000); 47. } catch (InterruptedException e) { 48. e.printStackTrace(); 49. } 50. } 51. } 52. } 53. /** 54. * 仓库 55. * 56. * @author 老紫竹(laozizhu.com) 57. */ 58. static class Warehouse { 59. // 非满锁 60. final Semaphore notFull = new Semaphore(10); 61. // 非空锁 62. final Semaphore notEmpty = new Semaphore(0); 63. // 核心锁 64. final Semaphore mutex = new Semaphore(1); 65. // 库存容量 66. final Object[] items = new Object[10]; 67. int putptr, takeptr, count; 68. /** 69. * 把商品放入仓库.<br> 70. * 71. * @param x 72. * @throws InterruptedException 73. */ 74. public void put(Object x) throws InterruptedException { 75. // 保证非满 76. notFull.acquire(); 77. // 保证不冲突 78. mutex.acquire(); 79. try { 80. // 增加库存 81. items[putptr] = x; 82. if (++putptr == items.length) 83. putptr = 0; 84. ++count; 85. } finally { 86. // 退出核心区 87. mutex.release(); 88. // 增加非空信号量,允许获取商品 89. notEmpty.release(); 90. } 91. } 92. /** 93. * 从仓库获取商品 94. * 95. * @return 96. * @throws InterruptedException 97. */ 98. public Object take() throws InterruptedException { 99. // 保证非空 100. notEmpty.acquire(); 101. // 核心区 102. mutex.acquire(); 103. try { 104. // 减少库存 105. Object x = items[takeptr]; 106. if (++takeptr == items.length) 107. takeptr = 0; 108. --count; 109. return x; 110. } finally { 111. // 退出核心区 112. mutex.release(); 113. // 增加非满的信号量,允许加入商品 114. notFull.release(); 115. } 116. } 117. } 118.} import java.util.concurrent.Semaphore; /** * 老紫竹JAVA提高教程-信号量(Semaphore)的使用。<br> * 生产者和消费者的例子,库存的管理。 * * @author 老紫竹(java2000.net,laozizhu.com) */ public class TestSemaphore { public static void main(String[] args) { // 启动线程 for (int i = 0; i <= 3; i++) { // 生产者 new Thread(new Producer()).start(); // 消费者 new Thread(new Consumer()).start(); } } // 仓库 static Warehouse buffer = new Warehouse(); // 生产者,负责增加 static class Producer implements Runnable { static int num = 1; @Override public void run() { int n = num++; while (true) { try { buffer.put(n); System.out.println(">" + n); // 速度较快。休息10毫秒 Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } } } // 消费者,负责减少 static class Consumer implements Runnable { @Override public void run() { while (true) { try { System.out.println("<" + buffer.take()); // 速度较慢,休息1000毫秒 Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } } /** * 仓库 * * @author 老紫竹(laozizhu.com) */ static class Warehouse { // 非满锁 final Semaphore notFull = new Semaphore(10); // 非空锁 final Semaphore notEmpty = new Semaphore(0); // 核心锁 final Semaphore mutex = new Semaphore(1); // 库存容量 final Object[] items = new Object[10]; int putptr, takeptr, count; /** * 把商品放入仓库.<br> * * @param x * @throws InterruptedException */ public void put(Object x) throws InterruptedException { // 保证非满 notFull.acquire(); // 保证不冲突 mutex.acquire(); try { // 增加库存 items[putptr] = x; if (++putptr == items.length) putptr = 0; ++count; } finally { // 退出核心区 mutex.release(); // 增加非空信号量,允许获取商品 notEmpty.release(); } } /** * 从仓库获取商品 * * @return * @throws InterruptedException */ public Object take() throws InterruptedException { // 保证非空 notEmpty.acquire(); // 核心区 mutex.acquire(); try { // 减少库存 Object x = items[takeptr]; if (++takeptr == items.length) takeptr = 0; --count; return x; } finally { // 退出核心区 mutex.release(); // 增加非满的信号量,允许加入商品 notFull.release(); } } } }
发表于 @ 2009年03月17日 11:11:00 | 评论( 4 ) | 编辑| 举报| 收藏
旧一篇:平庸和优秀的距离,我要得不仅仅是土豆 | 新一篇:国内顶级IT公司面试题的答案
查看最新精华文章 请访问博客首页相关文章
生产者消费者问题的java实现有趣的生产者消费者问题老紫竹JAVA提高教程(1)-认识Set集合老紫竹JAVA提高教程(7)-认识List列表之ArrayListQt 多线程学习(1)线程同步Condition Variables JAVA多线程生产者消费者问题——Java方案zhangweiheb 发表于2009年3月17日 22:06:26 IP:举报回复删除
今天上午的操作系统的课也讲到这里了,本来也想用Java写个例子试一下,看来赵老师先把样板写出来了,哈哈...
顺便问一下赵老师,Semaphore 和 synchronize 有什么联系吗?liu251 发表于2010年1月7日 18:49:25 IP:举报回复删除
在有些系统中没有互斥锁mutex原语,只有信号量,此时synchronized的实现是通过semaphore实现的yin_slin 发表于2010年7月23日 17:20:54 IP:举报回复删除
代码很精彩,写出了Semaphore的用途,特别是核心锁的互斥作用,但这段代码性能并不高,生产者和消费者是单线程运作的,没有体现concurrency包的高性能特性
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/java2000_net/archive/2009/03/17/3997449.aspx
发表评论
-
通过JVM获取相关的服务器信息 .
2012-02-02 14:24 1122分类: j2ee 2009-05-12 16:12 1034人 ... -
JVM调优总结 -Xms -Xmx -Xmn -Xss
2011-11-10 09:15 7332009-03-05 JVM调优总结 -Xms -Xmx - ... -
关于java Runtime.getRunTime.exec(String command)的使用
2011-10-19 19:31 90632008-09-26 19:44当要调用一个外部程序的时候,j ... -
关于java调用bat文件,不打开窗口
2011-10-19 19:31 2121Runtime.getRuntime().exec(" ... -
Runtime.getRuntime().exec(cmd) cd
2011-10-19 18:49 2818BashLinux.如果要在java程序里执行一条linux可 ... -
11款用于优化、分析源代码的Java工具
2011-08-03 09:16 598from http://java.csdn.net/a/201 ... -
用java实现html转pdf
2011-02-28 12:58 6609import java.io.File; import ja ... -
[转]用java流方式判断文件类型
2011-02-28 11:46 2425文章分类:Java编程 今天在群里面看有人贴的一个帖子,觉 ... -
jodconverter纯文本文件转为pdf时中文问题解决方案
2011-02-28 11:28 2005文章分类:Java编程 jodconverter转换ms文 ... -
利用OpenOffice将word转换成PDF
2011-02-28 11:00 3073引用文章分类:Java编程 之前找了一种方式是通过jacob ... -
北理工Java技术与应用考试试题参考答案及点评(下)
2011-01-24 12:12 957from :http://blog.csdn.net/bitf ... -
北理工Java技术与应用考试试题参考答案及点评(上)
2011-01-24 12:11 1251from http://blog.csdn.net/bitfa ... -
自测一下你的Java掌握得怎么样
2011-01-24 12:10 817引用自测一下你的Java掌握得怎么样? ========= ... -
Java执行脚本代码分析
2011-01-21 16:46 1246Java, 执行脚本 1、可用的脚本引擎 Java 6 ... -
java开发守护进程
2011-01-11 13:29 1174其实就是想开发个Windows下系统服务一样的程序。而查了好久 ... -
JDK5.0垃圾收集优化
2010-09-08 10:37 678JDK5.0垃圾收集优化(转 ... -
volatile 变量使用指南
2010-06-10 10:40 729Java 理论与实践: 正确使 ...
相关推荐
JAVA多线程--信号量(Semaphore)_.docx
使用信号量(Semaphore)实现线程的同步
a: 创建一个线程 b: 创建多个线程 c: 多线程访问同一资源 d: 经典线程同步互斥问题 e: 使用关键段解决子线程互斥问题 f: 利用事件实现线程同步问题 ...I: 信号量 semaphore 解决线程同步问题
Semaphore是计数信号量。Semaphore管理一系列许可证。每个acquire方法阻塞,直到有一个许可证可以获得然后拿走一个许可证;每个release方法增加一个许可证,这可能会释放一个阻塞的acquire方法。然而,其实并没有...
Laravel开发-laravel-semaphore 信号量集成到Laravel的通知层。
Swift-dispatch_semaphore
OC-dispatch_semaphore
1、在WINDOWS 2000环境下,创建一个控制台进程,此进程包括4个线程:2个生产者线程和2个消费者线程。 2、用信号量机制解决进程(线程)的同步与互斥问题。 二、实验目的 1.掌握基本的同步互斥算法,理解生产者和消费者...
在测试用例文件中指定了所有的生产和消费的需求,只有当共享缓冲区的数据满足了所有关于它的消费需求后,此共享缓冲区才可以作为空闲空间允许新的生产者使用。 本实验在为生产者分配缓冲区时各生产者间必须互斥,...
Linux下多线程编程-Pthread与Semaphore的使用.doc
多线程实现生产者消费者模型:锁(Lock)、信号量(Semaphore、BoundedSemaphore)、条件(Condition)、队列(Queue)、事件(Event) 多进程程实现生产者消费者模型:信号量(Semaphore)、条件(Condition)、...
基于 Java 的并发信号量的计数信号量。 安装 通过 npm 安装模块: npm install async-semaphore 快速示例 // fairness false var Semaphore = require ( 'async-semaphore' ) ; var semaphore = new Semaphore ( ...
实验题目: 生产者与消费者(综合性实验) 实验环境: C语言编译器 实验内容: ① 由用户指定要产生的进程及其类别,存入进入就绪队列。 ② 调度程序从就绪队列中提取一个就绪进程运行。如果申请的资源被阻塞则...
在测试用例文件中指定了所有的生产和消费的需求,只有当共享缓冲区的数据满足了所有关于它的消费需求后,此共享缓冲区才可以作为空闲空间允许新的生产者使用。 本实验在为生产者分配缓冲区时各生产者间必须互斥,...
开源项目-vasilmkd-semaphore.zip,A lockless semaphore package using atomic instructions, feedback appreciated
信号量(Semaphore)哲学家进餐问题(the dining philosophers problem)---------------------------程序
Semaphore分为单值和多值两种,前者只能被一个线程获得,后者可以被若干个线程获得。 Semaphore实现的功能类似厕所有5个坑,假如有10个人要上厕所,那么同时只能有多少个人去上厕所呢?同时只能有5个人能够...
1、信号量:就是一种可用来控制访问资源的数量的标识,设定了一个信 2、信号量主要有3个函数,分别是: 3、那么就开头提的问题,我们用代码来解决
主要介绍了Java 信号量Semaphore的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧