PV操作:读者写者问题
来源:互联网 发布:淘宝开抢提醒 编辑:程序博客网 时间:2024/05/22 03:45
package concurrent;import java.util.Date;import java.util.concurrent.Semaphore;public class WriterAndReader {public static void main(String[] args) {Semaphore resourceMutex = new Semaphore(1);Semaphore readerCounterMutex= new Semaphore(1);ReaderCount readerCount = new ReaderCount();Semaphore priority = new Semaphore(1,true);for(int i= 0 ; i <5; i++){Thread thread;if(i % 4 == 0){thread = new Thread(new Writer(resourceMutex,priority));}else{thread = new Thread(new Reader(resourceMutex,readerCounterMutex,readerCount,priority));}thread.start();}}}class Writer implements Runnable {Semaphore resourceMutex; Semaphore priority;public Writer(Semaphore resourceMutex, Semaphore priority) {this.resourceMutex = resourceMutex;this.priority = priority;}@Overridepublic void run() {// TODO Auto-generated method stubfor (int i = 0; i < 100; i++) {try {Date date = new Date();priority.acquire();resourceMutex.acquire();System.out.println("writer : " +Thread.currentThread().getName()+ " times " + i + " :");resourceMutex.release();priority.release();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();System.out.println("lock error");}}}}class ReaderCount {private int readerCount;public ReaderCount() {readerCount = 0;}public int addReader() {++readerCount;return readerCount;}public int minusReader() {--readerCount;return readerCount;}}class Reader implements Runnable {Semaphore resourceMutex;Semaphore readerCounterMutex;private ReaderCount readerCount;Semaphore priority;public Reader(Semaphore resourceMutex, Semaphore readerCounterMutex,ReaderCount readerCount,Semaphore priority) {this.resourceMutex = resourceMutex;this.readerCounterMutex = readerCounterMutex;this.readerCount = readerCount;this.priority = priority;}@Overridepublic void run() {// TODO Auto-generated method stubfor (int i = 0; i < 100; i++) {try {Date date = new Date(); priority.acquire();readerCounterMutex.acquire();if (readerCount.addReader() == 1) {resourceMutex.acquire();System.out.println("reader in");}readerCounterMutex.release();priority.release();System.out.println("reader : "+Thread.currentThread().getName() + " times " + i + " :");readerCounterMutex.acquire();if (readerCount.minusReader() == 0) {System.out.println("reader out");resourceMutex.release();}readerCounterMutex.release();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();System.out.println("lock error");}}}}
0 0
- win32 pv操作 读者写者问题
- PV操作:读者写者问题
- 读者写者,pv操作
- PV读者写者问题
- 操作系统PV操作及读者写者问题
- 读者写者问题(写者优先)的信号量及PV操作解决方案
- 读者写者问题
- 读者写者问题
- 读者-写者问题
- 读者写者问题
- 读者写者问题
- 读者-写者问题
- 读者-写者问题
- 读者-写者问题
- 读者写者问题
- 读者-写者问题
- 读者-写者问题
- 读者写者问题
- 字符串基本处理函数
- perl 中的$/
- 反渗透设备:反渗透水处理设备应用广泛
- 图像处理笔记-day1
- 安装版的tomcat6.0 内存设置【tomcat6.0内存溢出】
- PV操作:读者写者问题
- 看美剧学英语
- Linux fork面试题
- 字符串编码
- Android添加快捷方式(Short)到手机桌面
- Android设计模式之工厂模式
- 今年谷歌会重返中国市场?
- R cannot be resolved to a variable 解决办法
- this和super