前几天项目总是报错,找了下原因。
ConcurrentLinkedQueue 本身是一个基于链接节点的无界线程安全队列,你自己调用就不用考虑线程安全了吗?
结论是:原子性操作当然是线程安全的,非原子性那就不安全了
原子性操作:
queue.add(obj); or
queue.poll();
非原子性操作(这里涉及到两个操作,在大并发的时候,在两个方法之间,在中间这个时刻,即当调用完了queue.isEmpty()的时候,可能有人操作了queue.poll(),在当你调用queue.poll()的时候,队列已经为空了,所以就出现异常了)
if(!queue.isEmpty()) { queue.poll(); }
应该为下面:
synchronized(queue) { if(!queue.isEmpty()) { queue.poll(); } }
参考:http://stackoverflow.com/questions/435069/java-util-concurrentlinkedqueue/435941
相关推荐
一个简单的jdbc连接池,考虑到线程安全,这里使用了ConcurrentLinkedQueue,新手入门,简单易懂
ConcurrentLinkedQueue源码分析
ConcurrentLinkedQueue
ConcurrentLinkedQueue 在考虑并发的时候可以先考虑单线程的情况,然后再将并发的情况考虑进来。 比如ConcurrentLinkedQueue: 1、先考虑单线的offer 2、再考虑多线程时候的offer: · 多个线程offer...
主要介绍了Java concurrency集合之ConcurrentLinkedQueue,需要的朋友可以参考下
并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法
Java 多线程与并发(15_26)-JUC集合_ ConcurrentLinkedQueue详解
并发集合:JUC提供了一些线程安全的集合类,如ConcurrentHashMap、ConcurrentLinkedQueue等,可以在多线程环境下安全地访问和修改集合。 原子操作:JUC提供了一些原子操作类,如AtomicInteger、AtomicLong等,可以...
volatile关键字的非原子性、volatile关键字的使用、AtomicInteger原子性操作、线程安全小例子:多个线程竞争问题、多个线程多个锁问题、创建一个缓存的线程池、多线程使用Vector或者HashTable的示例(简单线程同步...
LinkedBlockingQueue 首先 LinkedBlockingQueue 是一个 “可选且有界” 的阻塞队列实现,你可以根据需要指定队列的大小。 接下来,我将创建一个 LinkedBlockingQueue ,它最多可以包含100个元素: ...
自己动手让springboot异步处理浏览器发送的请求(只需要使用ConcurrentLinkedQueue即可)
【2018最新最详细】并发多线程教程,课程结构如下 1.并发编程的优缺点 2.线程的状态转换以及基本操作 3.java内存模型以及happens-before规则 4.彻底理解synchronized 5.彻底理解volatile 6.你以为你真的了解final吗...
将对象封装到线程安全对象中 由特定锁保护 保护对象的方法 对象的组合 设计线程安全的类 实例封闭 线程安全的委托 委托是创建线程安全类的最有效策略,只需要让现有的线程安全类管理所有...
ConcurrentLinkedQueue 提供高效的多线程访问。 队列数据结构提供高效的轮询和提供操作以快速添加/获取资源。 为了防止线程冲突,使用了公平的 ReentrantReadWriteLock。 公平意味着等待线程根据它们等待的时间进行...
聊聊并发(6)ConcurrentLinkedQueue的实现原理分析Java开发Java经验技巧共18页.pdf.zip
线程安全:Java中的线程安全,包括同步方法和同步块等。 死锁:Java中的死锁,包括如何避免死锁和如何解除死锁。 性能优化:Java中的性能优化,包括JVM参数调优、代码优化、使用并发框架等。 并行计算:Java中的并行...
- **`CopyOnWriteArrayList`** : 线程安全的 `List`,在读多写少的场合性能非常好,远远好于 `Vector`。 - **`ConcurrentLinkedQueue`** : 高效的并发队列,使用链表实现。可以看做一个线程安全的 `LinkedList`,这...
了解多线程所带来的安全风险.mp4 从线程的优先级看饥饿问题.mp4 从Java字节码的角度看线程安全性问题.mp4 synchronized保证线程安全的原理(理论层面).mp4 synchronized保证线程安全的原理(jvm层面).mp4 单例问题...
非双向变量:ConcurrentLinkedQueue(无界线程安全),采用CAS机制(compareAndSwapObject原子操作)。 双向队列:ArrayBlockingQueue(有界),LinkedBlockingQueue(无界),DelayQueue,PriorityBlockingQueue,...
Queue接口 – 队列1.1 ConcurrentLinkedQueue类(线程安全)2. BlockingQueue接口 – 阻塞队列2.1 ArrayBlockingQueue类(有界阻塞队列)2.2 LinkedBlockingQueue类(无界阻塞队列)3. 源码:BlockingQueue实现生产...