Java concurrency集合之LinkedBlockingDeque_动力节点Java学院整理
Java concurrency之LinkedBlockingDeque详解 LinkedBlockingDeque是Java concurrency包中的一个重要类,它是双向链表实现的双向并发阻塞队列。该阻塞队列同时支持FIFO和FILO两种操作方式,即可以从队列的头和尾同时操作(插入/删除);并且,该阻塞队列是支持线程安全的。 LinkedBlockingDeque的特点: 1. 双向链表实现:LinkedBlockingDeque是通过双向链表实现的,具有高效的插入和删除操作。 2. 并发阻塞队列:LinkedBlockingDeque支持多线程并发访问,能够确保线程安全。 3. FIFO和FILO操作方式:LinkedBlockingDeque支持FIFO(First-In-First-Out)和FILO(First-In-Last-Out)两种操作方式,可以从队列的头和尾同时操作。 4. 可选容量:LinkedBlockingDeque是可选容量的,即可以指定队列的容量。如果不指定,默认容量大小等于Integer.MAX_VALUE。 LinkedBlockingDeque的数据结构: 1. first:双向链表的表头。 2. last:双向链表的表尾。 3. count:LinkedBlockingDeque的实际大小,即双向链表中当前节点个数。 4. capacity:LinkedBlockingDeque的容量,它是在创建LinkedBlockingDeque时指定的。 5. lock:控制对LinkedBlockingDeque的互斥锁,当多个线程竞争同时访问LinkedBlockingDeque时,某线程获取到了互斥锁lock,其它线程则需要阻塞等待,直到该线程释放lock,其它线程才有机会获取lock从而获取cpu执行权。 6. notEmpty和notFull分别是“非空条件”和“未满条件”。通过它们能够更加细腻进行并发控制。 LinkedBlockingDeque的函数列表: 1. LinkedBlockingDeque():创建一个容量为Integer.MAX_VALUE的LinkedBlockingDeque。 2. LinkedBlockingDeque(Collection<? extends E> c):创建一个容量为Integer.MAX_VALUE的LinkedBlockingDeque,最初包含给定collection的元素,以该collection迭代器的遍历顺序添加。 3. LinkedBlockingDeque(int capacity):创建一个具有给定(固定)容量的LinkedBlockingDeque。 4. boolean add(E e):在不违反容量限制的情况下,将指定的元素插入此双端队列的末尾。 5. void addFirst(E e):如果立即可行且不违反容量限制,则将指定的元素插入此双端队列的开头。 6. void addLast(E e):如果立即可行且不违反容量限制,则将指定的元素插入此双端队列的末尾。 7. void clear():以原子方式(atomically)从此双端队列移除所有元素。 8. boolean contains(Object o):如果此双端队列包含指定的元素,则返回true。 9. Iterator<E> descendingIterator():返回在此双端队列的元素上以逆向连续顺序进行迭代的迭代器。 10. int drainTo(Collection<? super E> c):移除此队列中所有可用的元素,并将它们添加到给定collection中。 11. int drainTo(Collection<? super E> c, int maxElements):最多从此队列中移除给定数量的可用元素,并将这些元素添加到给定collection中。 12. E element():获取但不移除此双端队列表示的队列的头部。 13. E getFirst():获取,但不移除此双端队列的第一个元素。 14. E getLast():获取,但不移除此双端队列的最后一个元素。 15. Iterator<E> iterator():返回在此双端队列元素上以恰当顺序进行迭代的迭代器。 LinkedBlockingDeque是一个功能强大且线程安全的双向阻塞队列,广泛应用于Java并发编程中。
- 粉丝: 4
- 资源: 929
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助