Condition的阻塞队列
程序员文章站
2022-04-20 23:09:07
...
package cn.zto.condition; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; //阻塞队列 public class ConditionTest { Lock lock = new ReentrantLock(); Condition notFull = lock.newCondition(); Condition notEmpty = lock.newCondition(); 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) putptr = 0; 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--; notFull.signal(); return x; } finally { lock.unlock(); } } }
上一篇: 通过阻塞队列实现文件关键字检索功能
下一篇: 阻塞队列