`

如何正确的使用java.util.ConcurrentLinkedQueue

阅读更多
Java 5 中提供了 ConcurrentLinkedQueue 来简化并发操作。但是有一个问题:使用了这个类之后是否意味着我们不需要自己进行任何同步或加锁操作了呢?



我在网上找到了这个:http://stackoverflow.com/questions/435069/java-util-concurrentlinkedqueue/435941 // StackOverflow果然是个好地方啊……



也就是说,如果直接使用它提供的函数,比如:queue.add(obj); 或者 queue.poll(obj);,这样我们自己不需要做任何同步。但如果是非原子操作,比如:

if(!queue.isEmpty()) {
   queue.poll(obj);
}

我们很难保证,在调用了 isEmpty() 之后,poll() 之前,这个 queue 没有被其他线程修改。所以对于这种情况,我们还是需要自己同步:

synchronized(queue) {
    if(!queue.isEmpty()) {
       queue.poll(obj);
    }
}
分享到:
评论

相关推荐

    java.util.concurrent介绍(重要).pdf

    使用这些类和接口,开发者可以编写更加高效、可扩展和易于理解的并发代码,减少对低级同步原语(如 `synchronized` 和 `wait()`/`notify()`)的依赖,提高代码的可读性和正确性。此外,`java.util.concurrent` 包的...

    Java_JUC_Study:java.util.concurrent代码示例学习

    Java并发编程是Java开发中的重要领域,特别是在多线程应用中,`java.util.concurrent`(JUC)包提供了丰富的工具类和接口,帮助开发者高效、安全地管理并发任务。本项目"Java_JUC_Study"显然是一个针对这个关键包的...

    ConcurrentLinkedQueue源码分析.rar

    首先,我们要明白`ConcurrentLinkedQueue`是Java并发包`java.util.concurrent`中的一个类,它实现了`Queue`接口,并且遵循FIFO(先进先出)原则。与传统的同步队列如`ArrayBlockingQueue`不同,`...

    java并发编程分享

    Java并发集合如ConcurrentHashMap、CopyOnWriteArrayList和ConcurrentLinkedQueue等,设计时考虑了线程安全,能够在不使用同步的情况下提供高并发性能。 7. **线程池** `java.util.concurrent.ExecutorService`和...

    Java多线程安全集合

    Java的`java.util.concurrent`包提供了更为高效且专门设计用于并发操作的集合。比如: - `ConcurrentHashMap`:线程安全的哈希映射,比`synchronized Map`性能更好,因为它允许不同部分独立加锁,减少了锁竞争。 ...

    高并发多线程处理demo-java.rar

    10. **线程间的通信**:Java提供了`wait()`, `notify()`, `notifyAll()`方法,以及`java.util.concurrent`包中的工具类,如`CountDownLatch`, `CyclicBarrier`, `Semaphore`等,用于线程间的同步和通信。 以上知识...

    Java Concurrency in Practice中文版

    6. **第六章:并发集合** - 讨论java.util.concurrent包下的并发安全集合,如ConcurrentHashMap、CopyOnWriteArrayList和ConcurrentLinkedQueue,以及它们在高并发环境下的优势。 7. **第七章:线程池** - 解析...

    java并发实战中文文档

    9. **Java内存模型**:Java内存模型(JMM)规定了线程如何访问和修改共享变量,理解JMM对于编写正确的并发程序至关重要。 通过阅读《Java并发实战》,开发者不仅可以掌握Java并发编程的基础,还能学习到高级技巧和...

    并发编程Java代码示例.zip

    6. **并发容器**:Java提供了一些并发友好的容器,如`ConcurrentHashMap`、`CopyOnWriteArrayList`和`ConcurrentLinkedQueue`,它们内部实现了线程安全的算法,使得在多线程环境下使用更加安全高效。 7. **并发工具...

    Java并发程序设计教程

    **并发集合**:Java并发包(java.util.concurrent)提供了线程安全的集合,如ConcurrentHashMap、CopyOnWriteArrayList和ConcurrentLinkedQueue等,它们内部实现了高效的同步机制,可以在多线程环境下安全地使用。...

    java并发.rar

    此外,Java并发编程还涉及到线程安全的数据结构,如ConcurrentHashMap、ConcurrentLinkedQueue等,这些数据结构在多线程环境下能保证正确性,无需额外的同步措施。CompletableFuture是Java 8引入的一个强大工具,它...

    一个简单的Java并发系统动态测试工具.zip

    综上所述,Java并发系统动态测试工具结合了Java并发编程的各种概念和机制,通过实际的代码分析和测试,帮助开发者确保他们的并发程序正确、高效地运行。理解和掌握这些知识点对于编写健壮的多线程应用至关重要。

    Java并发基础共6页.pdf.zip

    5. **并发集合**:Java并发集合如`ConcurrentHashMap`、`CopyOnWriteArrayList`和`ConcurrentLinkedQueue`等,它们内部设计了线程安全的实现,允许在并发环境下高效地进行操作。 6. **Future和Callable**:`Future`...

    java多线程.pdf

    Java的并发包(java.util.concurrent)提供了多种线程安全的并发数据结构,如CopyOnWriteArrayList、ConcurrentHashMap、ConcurrentLinkedQueue等。这些数据结构在设计上考虑了多线程环境下的数据安全和访问效率,...

    Java并发编程进阶练习代码

    Java 5引入了`java.util.concurrent`包,其中`BlockingQueue`接口和其实现如`ArrayBlockingQueue`、`LinkedBlockingQueue`等提供了更高级的线程间通信方式,它们可以用于生产者-消费者模式或者工作窃取模式。...

    Java并发编程的艺术.zip

    - **java.util.concurrent.atomic包**:包含`AtomicInteger`, `AtomicLong`等类,提供在不使用锁的情况下实现原子操作的方法。 6. **线程池** - **线程池原理**:如何管理线程的创建、复用和销毁,以及任务的提交...

    关于Java_Collection_API_

    对于多线程环境下的队列操作,推荐使用`java.util.concurrent.ConcurrentLinkedQueue`类,该类采用无锁并发设计,能提供更好的性能。 综上所述,在实际开发过程中,开发者需要根据具体的应用场景选择合适的集合类,...

    Java并发编程:设计原则与模式(第二版)-3

    4. **并发集合框架**:Java并发集合框架(java.util.concurrent包)提供了线程安全的数据结构,如ConcurrentHashMap、CopyOnWriteArrayList、ConcurrentLinkedQueue等,它们在多线程环境下表现优秀,避免了传统的...

    Java 并发 编程 实战

    3. **并发容器**:`java.util.concurrent`包中的并发容器,如`ConcurrentHashMap`、`ConcurrentLinkedQueue`、`CopyOnWriteArrayList`等,它们在并发环境下提供了更好的性能和线程安全。了解这些容器的特性和使用...

    Java多线程聊天

    5. **线程池**:使用`java.util.concurrent`包中的`ExecutorService`可以有效地管理线程资源,避免频繁创建和销毁线程的开销。线程池可以根据需求设置最大线程数量,从而控制并发程度。 6. **异步编程与回调**:...

Global site tag (gtag.js) - Google Analytics