Java线程安全队列BlockingQueue

摘要:
线程安全队列BlockingQueue用法跟普通队列没有区别,只是加入了多线程支持。add会返回插入队列的结果,成功返回true,失败返回false,put不会返回结果,因为BlockingQueue的长度是在创建这个队列的时候就设定好了的,当队列已经满了的时候,add会跑出异常,而put则会阻塞直到插入成功。

线程安全队列BlockingQueue

用法跟普通队列没有区别,只是加入了多线程支持。

这里主要说说add和put,以及poll和take的区别:

add和put都是用来忘队列里面塞东西的,而poll和take都是用来取队列的头元素的。

下面看下声明:

add: boolean java.util.concurrent.BlockingQueue.add(Object e);
put:void java.util.concurrent.BlockingQueue.put(Objecte) throws InterruptedException;
poll:Object java.util.Queue.poll();
经过实际测试,结果如下:
总结:add和poll是非阻塞的,put和take是阻塞的。
add会返回插入队列的结果,成功返回true,失败返回false, put不会返回结果,因为BlockingQueue的长度是在创建这个队列的时候就设定好了的,当队列已经满了的时候,
add会跑出异常,而put则会阻塞直到插入成功。
poll和take的区别类似, 当队列为空时,take会阻塞至取到元素为止,而poll会返回null值。

免责声明:文章转载自《Java线程安全队列BlockingQueue》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Kotlin 实战记录(一):Android Studio + Kotlin 开发问题整理解读SQL 内存数据库的细节下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

(转)Netty : writeAndFlush的线程安全及并发问题

rocketmq用netty实现的网络连接,发现它多个线程掉用一个channel连接,所以这个是线程安全的? 使用Netty编程时,我们经常会从用户线程,而不是Netty线程池发起write操作,因为我们不能在netty的事件回调中做大量耗时操作。那么问题来了 – 1, writeAndFlush是线程安全的吗? 2, 是否使用了锁,导致并发性能下降呢 我...

【译】C++日志(Logging in C++)

声明:原创翻译,转载请注明出处!http://www.cnblogs.com/mewmicro/p/6432507.html 注:作者Petru Marginean,2007/09/05   日志记录是用于故障排除和维护软件系统的关键技术。Petru提供了一种类型安全,线程安全和可移植的C ++日志框架。           日志记录是用于故障排除和维护软...

利用select/poll监听多个设备详解

如果一个应用程序去处理多个设备,例如应用程序读取网路数据,按键,串口,一般能想到的有三种方法: 方法1:串行+阻塞的方式读取:while(1) { read(标准输入);read(网络);}缺点:每当阻塞读取标准输入时,如果用户不进行标准输入的操作,而此时客户端给服务器发送数据,导致服务器无法读取客户端发送来的数据! 方法2:采用多线程或者多进程机制来实现...

面试刷题10:ConcurrentHashMap如何保证线程安全?

集合框架中的HashTable,Stack,以及同步包装集合在高并发场景下都非常低效,java提供了并发包应对高并发场景。我是李福春,我在准备面试,今天的问题是?java提供了哪些并发的容器?ConcurrentHashMap如何保证线程安全?java体系中的并发容器 java体系中有如下同步容器:1, HashTable,Stack 同步容器,内部使用...

linux mce的一些相关内容和用户态监控的设计方法

之所以想起写一点关于mce的东西,倒不是因为遇到mce的异常了,之前遇到过很多mce的异常,内存居多,但没有好好记录下来,写这个是因为参加2018 clk南京会议的一点想法。 void __init trap_init(void) { 。。。 #ifdef CONFIG_X86_MCE set_intr_gate_ist(X86_TRAP_MC,...

Java面试——多线程面试题总结

0.前言 在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分,本文汇总了常见的一些多线程面试题。 一些问题,比如volatile关键词的作用,synchronized和ReentrantLock的区别,wait()和sleep()的区别等等问题,已经在之前写过的文章中提到过了,这里就不赘述了,有兴趣可以查看以下几篇文章:Java并发——线程同...