`

由ConcurrentLinkedQueue扯到线程安全 待整理

    博客分类:
  • JVM
 
阅读更多

前几天项目总是报错,找了下原因。

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`的线程安全性,可以确保在并发环境中,每个线程都能安全地获取到连接,而不会出现竞态条件。 3. 归还连接:完成数据库操作后,需要将连接归还给连接池,以便其他线程再次使用。归还过程...

    Java多线程安全集合

    - `ConcurrentLinkedQueue`:无界的线程安全队列,基于链接节点实现,适合高并发场景。 - `LinkedBlockingQueue`:有界线程安全队列,适合生产者-消费者模型。 3. 不可变集合(Immutable Collections): 例如`...

    ConcurrentLinkedQueue源码分析.rar

    在Java并发编程领域,`ConcurrentLinkedQueue`是一个非常重要的数据结构,它是线程安全的无界队列,基于链接节点实现,性能高效。本篇文章将深入探讨`ConcurrentLinkedQueue`的设计原理、内部结构以及其源码中的关键...

    LinkedBlockingQueue 和 ConcurrentLinkedQueue的区别.docx

    LinkedBlockingQueue和ConcurrentLinkedQueue是Java并发包中两个常用的线程安全队列,它们各有特点,适用于不同的场景。本文将深入探讨两者之间的差异以及如何根据需求选择合适的队列。 首先,LinkedBlockingQueue...

    Java 多线程与并发(15-26)-JUC集合- ConcurrentLinkedQueue详解.pdf

    - **任务调度**:在任务调度场景中,`ConcurrentLinkedQueue`可以用来存储待处理的任务,多个工作线程可以从队列中获取任务进行处理。 - **消息传递**:在分布式系统中,`ConcurrentLinkedQueue`可以用于消息队列,...

    java线程安全总结.pdf

    7. 使用线程安全的集合:java.util.concurrent包中包含了许多线程安全的集合类,例如ConcurrentHashMap、CopyOnWriteArrayList、ConcurrentLinkedQueue等,它们可以在多线程环境下安全使用,无需额外的同步。...

    Java concurrency集合之ConcurrentLinkedQueue_动力节点Java学院整理

    本文将深入探讨Java并发集合中的ConcurrentLinkedQueue,这是一个无界线程安全队列,特别适合处理高并发场景。 **ConcurrentLinkedQueue简介** ConcurrentLinkedQueue是Java并发包`java.util.concurrent`下的一个...

    并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法

    `ConcurrentLinkedQueue` 是 Java 并发包 `java.util.concurrent` 提供的一个高性能的线程安全队列实现,基于链表结构,它适用于对吞吐量有较高要求的场景。`ConcurrentLinkedQueue` 不提供容量限制,并且在队列为空...

    ConcurrentLinkedQueue

    ConcurrentLinkedQueue

    JAVA多线程与线程安全实践-基于Http协议的断点续传.rar

    在Java编程中,多线程和线程安全是核心概念,尤其在开发高效并发应用程序时。本项目"JAVA多线程与线程安全实践-基于Http协议的断点续传"探讨了如何在Java中实现多线程以及如何确保线程安全,特别是在处理HTTP协议的...

    Java 线程 ? ConcurrentLinkedQueue

    ConcurrentLinkedQueue  在考虑并发的时候可以先考虑单线程的情况,然后再将并发的情况考虑进来。  比如ConcurrentLinkedQueue:  1、先考虑单线的offer  2、再考虑多线程时候的offer:  · 多个线程offer...

    [线程技术]排序对象

    需要注意的是,虽然这个例子中使用了线程安全的 `List`,但在实际应用中,如果多线程环境中的排序操作是独立的,可以考虑使用并发集合,如 `ConcurrentSkipListSet` 或 `ConcurrentLinkedQueue`,它们在性能上可能更...

    聊聊并发(6)ConcurrentLinkedQueue的

    Java平台为此提供了一系列的并发工具类,其中`ConcurrentLinkedQueue`是一个无界的线程安全队列,它在Java并发编程中有着广泛的应用。本文将深入探讨`ConcurrentLinkedQueue`的实现原理和设计思路。 首先,`...

    自己动手让springboot异步处理浏览器发送的请求(只需要使用ConcurrentLinkedQueue即可)

    首先,`ConcurrentLinkedQueue`是Java并发包`java.util.concurrent`中的一个无界线程安全队列,基于链接节点实现,具有很好的性能。它的插入和删除操作都是O(1)的时间复杂度,非常适合用于高并发场景下的任务队列。...

    精通java多线程

    Java的并发集合库(java.util.concurrent包)提供了线程安全的集合类,如ConcurrentHashMap、CopyOnWriteArrayList和ConcurrentLinkedQueue等,它们在多线程环境下能确保数据的一致性和安全性。 十、异常处理 在多...

    Java线程(第三版)

    最后,线程安全的数据结构和并发容器,如`Atomic`类、`CopyOnWriteArrayList`和`ConcurrentLinkedQueue`,它们提供了一种线程安全的方式来操作共享数据,避免了同步带来的开销。 总之,《Java线程(第三版)》全面...

    java多线程编程

    视频教程中可能涵盖了线程安全的数据结构,如ArrayList和LinkedList在多线程环境下的问题,以及如何使用CopyOnWriteArrayList和ConcurrentLinkedQueue等线程安全的集合。还可能涉及并发工具类,如AtomicInteger、...

    java多线程测试实例

    - Java并发包`java.util.concurrent`提供了线程安全的集合类,如`ConcurrentHashMap`, `ConcurrentLinkedQueue`等,它们内部实现了线程安全机制。 10. **Callable与Future** - `Callable`接口类似于`Runnable`,...

    我总结的Java多线程程序设计

    Java提供了一些线程安全的数据结构,如`ConcurrentHashMap`, `ArrayList`s的线程安全版本`CopyOnWriteArrayList`, `ConcurrentLinkedQueue`等,可以在多线程环境中安全地使用。 六、线程局部变量 `ThreadLocal`类...

    Java线程 学习

    - **并发队列**:使用`ConcurrentLinkedQueue`、`ArrayBlockingQueue`等并发集合来管理线程间的任务队列。 #### 九、线程调试与测试 - **使用工具辅助调试**:借助于IDE中的调试工具(如断点、监视表达式等)来跟踪...

Global site tag (gtag.js) - Google Analytics