首页 > 代码库 > 并发包实现阻塞队列
并发包实现阻塞队列
/** * @描述: 阻塞队列 ,先放进来先取走 * 缓冲区:隔离效果,平均每一秒钟收一个短信,放在池子里 * 可以放可以取,当满了不能放,取走了之后才能取 * 当空的时候不能取,只有放了之后才能取 * @作者: Wnj . * @创建时间: 2017年5月16日 . * @版本: 1.0 . */public class BoundedBuffer { final Lock lock = new ReentrantLock(); //空 ,一个Condition有五个线程同时往池子里放,发现缓冲区满了,都阻塞了,结果有一个去取了,五个中有一个唤醒了,取完唤醒,那么只能唤醒取的,不能唤醒放的 final Condition notFull = lock.newCondition(); //满 final Condition notEmpty = lock.newCondition(); final Object[] items = new Object[100]; int putptr, takeptr, count; public void put(Object x) throws InterruptedException { lock.lock(); try { //如果格子已满 while (count == items.length) notFull.await(); items[putptr] = x; //指针 if (++putptr == items.length) //从0开始放 putptr = 0; //存入一个值的时候对count进行++ ++count; notEmpty.signal(); } finally { lock.unlock(); } } public Object take() throws InterruptedException { lock.lock(); try { //没有值的时候进行等待 while (count == 0) notEmpty.await(); Object x = items[takeptr]; if (++takeptr == items.length) takeptr = 0; //取走一个值的时候对count-- --count; //唤醒 notFull.signal(); return x; } finally { lock.unlock(); } }}
并发包实现阻塞队列
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。