脚本宝典收集整理的这篇文章主要介绍了基于java实现一个有限阻塞式生产者消费者队列队列(简单易懂),脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
本文介绍了如何基于CondITion实现一个有限阻塞式生产者消费者队列:代码如下:
public class BoundedBlockingQueue { AtomicInteger size = new AtomicInteger(0); PRivate volatile int capacity; //自己实现阻塞队列,需要一个容器,内部实现了一个node,如果改造为不只是int的,使用T泛型 private LinkedList<Integer> container; //可重入锁 private static ReentrantLock lock = new ReentrantLock(); Condition procuder = lock.newCondition();//用来通知生产(入队)线程等待await还是可以执行signal Condition consumer = lock.newCondition();//用来通知消费(出队)线程等待await还是可以执行signal public BoundedBlockingQueue(int capacity) { this.capacity = capacity; container = new LinkedList<>(); } /** * 入队 * * @param element * @throws InterruptedException */ public void enqueue(int element) throws InterruptedException { //每一个线程都会获得锁,但是如果条件不满足则会阻塞 lock.lock(); try { //阻塞的话必须用循环,让这个线程再次获得cpu片段的时候能够够执行 while (size.get() >= capacity) { //入队线程阻塞,把锁释放? procuder.await(); } container.addFirst(element); size.incrementAndGet(); //通知出队线程 consumer.signal(); } finally { lock.unlock(); } } public int dequeue() throws InterruptedException { lock.lock(); try { while (size.get() == 0) { consumer.await(); } int lastValue = container.getLast(); container.removeLast(); size.decrementAndGet(); //通知入队线程 procuder.signal(); return lastValue; } finally { lock.unlock(); } } public int size() { return size.get(); }}
以上是脚本宝典为你收集整理的基于java实现一个有限阻塞式生产者消费者队列队列(简单易懂)全部内容,希望文章能够帮你解决基于java实现一个有限阻塞式生产者消费者队列队列(简单易懂)所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。