简介:
LinkedBlockingDeque 是一个双端队列,在队列的两头都能进行 put/offer 操作.我感觉这个类很鸡肋,效率不是很高,大而全.
实现原理:
LinkedBlockingDeque 底层使用一把锁(ReentrantLock)来控制入队出队操作.也就是说队列两头的操作来抢这一把锁. 所以这是我认为效率低下的原因.
使用场景:
LinkedBlockingDeque 使用在工作窃取模式下.
工作窃取模式:比如说有两个工人A和B,A和B关系很好,老板给A和B分配了任务. 由于A的任务复杂度较低,先做完了,B 还在做. 因为A和B是好哥们,A说,哥们,你从前面往后做,我(A)从后面王前做,就这样,A和B一起把任务做完了.
和 LinkedBlockingQueue 对比:
1.LinkedBlockingQueue 使用两把锁来控制 take/put 操作,而 LinkedBlockingDeque 使用一把锁来控制,这是 LinkedBlockingDeque 效率低下原因之一.
2.LinkedBlockingQueue 只会在合适的条件下才会通知其他线程我没满/我没空,但是 LinkedBlockingDeque 会在每次执行 take/put 操作的时候都会通知其他线程我没满/我没空,这是 LinkedBlockingDeque 效率低下原因之二.
问题:
1.为啥 LinkedBlockingDeque 不使用两把锁来控制 take/put 了?就像 LinkedBlockingQueue 实现那样.
分享到:
相关推荐
Java concurrency之LinkedBlockingDeque详解 LinkedBlockingDeque是Java concurrency包中的一个重要类,它是双向链表实现的双向并发阻塞队列。该阻塞队列同时支持FIFO和FILO两种操作方式,即可以从队列的头和尾同时...
bitset源码Java源码分析 基础集合列表 ArrayList (done) Vector (done) LinkedList (done) Stack (done) ReferenceQueue (done) ArrayDeque (done) Set HashSet (done) TreeSet (done) LinkedHashSet (done) BitSet ...
LinkedBlockingDeque :scroll: 主要介绍LeetCode上面的算法译文,以及面试过程中遇到的实际编码问题总结。 :locked: :file_folder: :laptop: :globe_showing_Asia-Australia: :floppy_disk: :input_latin_...
6. **文档编写**:项目附带的“详细文档”可能包括需求分析、系统设计、程序流程图等,这有助于学习者学习如何撰写专业的技术文档,提高软件工程素养。 7. **版本控制**:虽然未明确提及,但一个完整的项目通常会...
高并发编程第三阶段11讲 AtomicXXXFieldUpdater源码分析及使用场景分析.mp4 高并发编程第三阶段12讲 sun.misc.Unsafe介绍以及几种Counter方案性能对比.mp4 高并发编程第三阶段13讲 一个JNI程序的编写,通过...
高并发编程第三阶段11讲 AtomicXXXFieldUpdater源码分析及使用场景分析.mp4 高并发编程第三阶段12讲 sun.misc.Unsafe介绍以及几种Counter方案性能对比.mp4 高并发编程第三阶段13讲 一个JNI程序的编写,通过...
链阻塞双端队列 LinkedBlockingDeque,并发 Map(映射) ConcurrentMap, 并发导航映射 ConcurrentNavigableMap,交换机 Exchanger, 信号量 Semaphore,执行器服务 ExecutorService, 线程池执行者 ThreadPoolExecutor,...
在Java中,可以使用`java.util.Deque`接口的实现,例如`java.util.concurrent.LinkedBlockingDeque`,它支持双端插入和删除,可以作为线程池的工作队列。 - 在创建`ThreadPoolExecutor`时,可以通过传递`...
9. 链阻塞双端队列 LinkedBlockingDeque 10. 并发 Map(映射) ConcurrentMap 11. 并发导航映射 ConcurrentNavigableMap 12. 闭锁 CountDownLatch 13. 栅栏 CyclicBarrier 14. 交换机 Exchanger 15. 信号量 Semaphore ...
9. 链阻塞双端队列 LinkedBlockingDeque 10. 并发 Map(映射) ConcurrentMap 11. 并发导航映射 ConcurrentNavigableMap 12. 闭锁 CountDownLatch 13. 栅栏 CyclicBarrier 14. 交换机 Exchanger 15. 信号量 Semaphore ...
链阻塞双端队列 LinkedBlockingDeque 10. 并发 Map(映射) ConcurrentMap 11. 并发导航 映射 ConcurrentNavigableMap 12. 闭锁 CountDownLatch 13. 栅栏 CyclicBarrier 14. 交换机 Exchanger 15. 信号量 Semaphore ...
JAVA学习高并发的学习笔记。...BlockingQueue:ArrayBlockingQueue , DelayQueue , LinkedBlockingDeque , LinkedBlockingQueue , LinkedTransferQueue , PriorityBlockingQueue , SynchronousQueue
在给出的示例中,创建了一个`LinkedBlockingDeque`实例,并尝试向其中添加30个元素,结果同样会因栈满而阻塞。 这些同步机制对于构建高效的并发应用程序至关重要,它们可以帮助避免死锁、减少不必要的线程上下文...
9. 链阻塞双端队列 LinkedBlockingDeque 10. 并发 Map(映射) ConcurrentMap 11. 并发导航映射 ConcurrentNavigableMap 12. 闭锁 CountDownLatch 13. 栅栏 CyclicBarrier 14. 交换机 Exchanger 15. 信号量 Semaphore ...
9. 链阻塞双端队列 LinkedBlockingDeque 10. 并发 Map(映射) ConcurrentMap 11. 并发导航映射 ConcurrentNavigableMap 12. 闭锁 CountDownLatch 13. 栅栏 CyclicBarrier 14. 交换机 Exchanger 15. 信号量 Semaphore ...
1. 数据结构:LRU Cache 的实现,可能使用了HashMap(用于快速查找)和Deque(如LinkedBlockingDeque或LinkedList,用于保持顺序)相结合的方式。 2. 插入操作:当有新数据插入时,首先检查LRU缓存是否已满。若已满...
### 10、阻塞队列BlockingQueue 实战及其原理分析 #### 一、阻塞队列概述 阻塞队列(BlockingQueue)是Java语言中`java.util.concurrent`包下提供的一种重要的线程安全队列。它继承自`Queue`接口,并在此基础上...
通过查看源码,我们可以深入理解如何实现生产者-消费者模型,包括线程间的同步和通信,以及如何避免常见的并发问题,如死锁、活锁和饥饿等。 总之,生产者-消费者问题是多线程编程中的经典案例,它展示了如何在多个...
例如,Java中的`java.util.concurrent.LinkedBlockingDeque`可以看作是一个环形缓冲区的实现,C++的Boost库提供了`boost::lockfree::ring_buffer`。在实际项目中,根据需求选择合适的库或自定义实现,以优化数据处理...
- **LinkedBlockingDeque**: 双端队列。 - **实现原理**: - 使用`Condition`实现通知机制,以同步队列中的生产者和消费者。 - **非阻塞队列**如`ConcurrentLinkedQueue`使用CAS算法来实现线程安全的操作。 **6. ...