【Java】并发之阻塞队列
2014-02-20 00:43
357 查看
BlockingQueue 方法以四种形式出现,对于不能立即满足但可能在将来某一时刻可以满足的操作,这四种形式的处理方式不同:第一种是抛出一个异常,第二种是返回一个特殊值(null 或 false,具体取决于操作),第三种是在操作可以成功前,无限期地阻塞当前线程,第四种未成功则阻塞,直到指定时间就放弃。下表中总结了这些方法:
BlockingQueue主要用于“生产者-消费者”的场景,这里,我们可以简化上文中的程序代码,如下:
在多线程程中分别调用produce()和consume()方法,同样可以确保生产与销售的协调进行,生产不会让库存超过100,而销售不会卖出剩下负数的产品。
大家注意到,这里上述代码中没有看到Lock和Condition控制代码了。其实,是放在BlockingQueue实现类里实现了Lock和Condition。
@容新华技术博客 - http://blog.csdn.net/rongxinhua -
原创文章,转载请注明出处
抛出异常 | 特殊值 | 阻塞 | 超时 | |
---|---|---|---|---|
插入 | add(e) | offer(e) | put(e) | offer(e, time, unit) |
移除 | remove() | poll() | take() | poll(time, unit) |
获取 | element() | peek() | 不可用 | 不可用 |
class Factory2 { private BlockingQueue<String> queue = new LinkedBlockingQueue<String>(100); /** * 生产1个产品 */ public void produce() { queue.offer("XXX"); } /** * 卖出1个产品 */ public void consume() { try { queue.take(); } catch (InterruptedException e) { e.printStackTrace(); } } }
在多线程程中分别调用produce()和consume()方法,同样可以确保生产与销售的协调进行,生产不会让库存超过100,而销售不会卖出剩下负数的产品。
大家注意到,这里上述代码中没有看到Lock和Condition控制代码了。其实,是放在BlockingQueue实现类里实现了Lock和Condition。
@容新华技术博客 - http://blog.csdn.net/rongxinhua -
原创文章,转载请注明出处
相关文章推荐
- Java 并发 --- 非阻塞队列之ConcurrentLinkedQueue源码分析
- Java并发(基础知识)—— 阻塞队列和生产者消费者模式
- Java 并发 --- 阻塞队列之SynchronousQueue源码分析
- 深入剖析java并发之阻塞队列LinkedBlockingQueue与ArrayBlockingQueue
- Java并发之BlockingQueue 阻塞队列(ArrayBlockingQueue、LinkedBlockingQueue、DelayQueue、PriorityBlockingQueue、SynchronousQueue)
- Java并发 阻塞队列
- 聊聊并发(七)——Java中的阻塞队列
- [Java并发包学习九]Java中的阻塞队列
- Java并发编程之阻塞队列详解
- 聊聊并发-Java中的阻塞队列
- 【转载】Java并发编程12:阻塞队列
- 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法 在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列(先进先出)。
- Java并发包:阻塞队列(BlockingQueue)
- Java并发编程:阻塞队列BlockingQueue
- Java 并发 --- 阻塞队列之DelayQueue源码分析
- Java并发框架——AQS阻塞队列管理(二)——自旋锁优化
- 聊聊并发(七)——Java中的阻塞队列
- java并发编程之阻塞队列
- Java并发编程:阻塞队列
- java 5并发中的阻塞队列ArrayBlockingQueue的使用以及案例实现