学习异步开发-简单实现缓冲区代码
2014-03-23 14:34
453 查看
import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class BoundBuffer { final Lock lock = new ReentrantLock(); final Condition notFull = lock.newCondition(); final Condition notEmpty = lock.newCondition(); int p = -1; final Object[] items = new Object[100]; public void put(Object o) throws InterruptedException { //获得锁 lock.lock(); try { while (p == items.length - 1) {//数据满了阻塞 notFull.await(); } items[++p] = o;//加入数据 notEmpty.notify();//唤醒take } finally { lock.unlock();//释放锁 } } public Object take() throws InterruptedException { lock.lock(); try { while (p == -1) { notEmpty.await(); } return items[p--]; } finally { lock.unlock(); } } }
相关文章推荐
- 去掉NetBeans在新建时的注释
- delphi 对象与类类型
- Windows核心编程(四)进程的创建与终止
- YII千万级PV架构经验分享--理论篇
- 黑马程序员-OC语言基础学习(五)
- vba窗口中显示右键
- Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
- C++等级考试第一套题遇到的问题
- Struts2与webx的比较
- 用php自带函数去除html标记
- Matlab中的傅里叶级数展开函数
- Java的浮点型
- SpringAOP的原理
- 基于Spring的异常体系架构处理
- 关于java位运算,笔试用
- 13种编程语言名称的来历
- 003_004 Python 获取列表中所有歌曲播放时间总和
- c获取lua全局变量 5
- php如何定时执行任务
- 解决python中matplotlib绘图中文显示问题