java Conditions
2016-04-12 09:08
387 查看
//Listing 7-2. Achieving Synchronization in Terms of Locks and Conditions import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class A { public static void main(String[] args) { Shared s = new Shared(); new Producer(s).start(); new Consumer(s).start(); } } class Shared { private char c; private volatile boolean available; private final Lock lock; private final Condition condition; Shared() { available = false; lock = new ReentrantLock(); condition = lock.newCondition(); } Lock getLock() { return lock; } char getSharedChar() { lock.lock(); try { while (!available) try { condition.await(); } catch (InterruptedException ie) { ie.printStackTrace(); } available = false; condition.signal(); } finally { lock.unlock(); return c; } } void setSharedChar(char c) { lock.lock(); try { while (available) try { condition.await(); } catch (InterruptedException ie) { ie.printStackTrace(); } this.c = c; available = true; condition.signal(); } finally { lock.unlock(); } } } class Producer extends Thread { private final Lock l; private final Shared s; Producer(Shared s) { this.s = s; l = s.getLock(); } @Override public void run() { for (char ch = 'A'; ch <= 'Z'; ch++) { l.lock(); s.setSharedChar(ch); System.out.println(ch + " produced by producer."); l.unlock(); } } } class Consumer extends Thread { private final Lock l; private final Shared s; Consumer(Shared s) { this.s = s; l = s.getLock(); } @Override public void run() { char ch; do { l.lock(); ch = s.getSharedChar(); System.out.println(ch + " consumed by consumer."); l.unlock(); } while (ch != 'Z'); } }
相关文章推荐
- java有没有 有序的map,而且可以 修改key
- struts2上传word文件并保存到服务器上
- java中string和int互相转化
- Java基础练习选择题(3)已整理
- Java实现冒泡排序与双向冒泡排序算法的代码示例
- Java基础练习选择题(2)答案已整理
- Struts2 Action原理
- js和Java中将时间转换为多少天、小时、分钟问题
- springMVC系列之(三) spring+springMVC集成(annotation方式)
- java-SpringMVC SMS短信发送详解
- 500 G JAVA视频网盘分享(Jeecg社区)
- springmvc 处理模型数据
- springMVC和struts的区别
- 写ArrayList随手出现No enclosing instance of type <program name> is accessible
- 更改系统环境变量后需要重启eclipse才会生效
- mysql驱动错误:java.sql.SQLException: Unknown system variable 'tx_read_only'
- Java国际化程序
- 合作开发,导入MyEclipse项目报错问题
- java_时间戳与Date_相互转化
- 《Java》反射全解