ITKeyword,专注技术干货聚合推荐

注册 | 登录

【Java】并发之阻塞队列

rongxh7 分享于 2014-02-20

推荐:Java并发编程:阻塞队列

 使用非阻塞队列的时候有一个很大问题就是:它不会对当前线程产生阻塞,那么在面对类似消费者-生产者的模型时,就必须额外地实现同步策略以及线程间唤醒策略,

2019阿里云全部产品优惠券(新购或升级都可以使用,强烈推荐)
领取地址https://promotion.aliyun.com/ntms/yunparter/invite.html

BlockingQueue 方法以四种形式出现,对于不能立即满足但可能在将来某一时刻可以满足的操作,这四种形式的处理方式不同:第一种是抛出一个异常,第二种是返回一个特殊值(null 或 false,具体取决于操作),第三种是在操作可以成功前,无限期地阻塞当前线程,第四种未成功则阻塞,直到指定时间就放弃。下表中总结了这些方法: 抛出异常 特殊值 阻塞 超时 插入 add(e) offer(e) put(e) offer(e, time, unit) 移除 remove() poll() take() poll(time, unit) 获取 element() peek() 不可用 不可用 BlockingQueue主要用于“生产者-消费者”的场景,这里,我们可以简化上文中的程序代码,如下: class Factory2 {

private BlockingQueue<String> queue = new LinkedBlockingQueue<S

推荐:并发 加锁 以及Java api自身的阻塞队列

 Java里的阻塞队列 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满

tring>(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并发包:阻塞队列(BlockingQueue)

文章译自:http://tutorials.jenkov.com/java-util-concurrent/index.html 抽空翻译了一下这个教程的文章,后面会陆续放出,如有不妥,请批评指正。 转自请注明

BlockingQueue 方法以四种形式出现,对于不能立即满足但可能在将来某一时刻可以满足的操作,这四种形式的处理方式不同:第一种是抛出一个异常,第二种是返回一个特殊值(null 或 false,具体取

相关阅读排行


用户评论

游客

相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。