Java Concurrency集合之LinkedBlockingDeque_动力节点Java学院整理
LinkedBlockingDeque是什么?
LinkedBlockingDeque是java.util.concurrent包下一个双向阻塞队列,用于在多线程的环境中处理元素序列,它支持在队列两端添加和移除元素。LinkedBlockingDeque可选容量,但默认大小为Integer.MAX_VALUE。
LinkedBlockingDeque特点
- 容量可选,默认为Integer.MAX_VALUE
- 支持在队列两端添加和移除元素
- 双向链式结构,支持高效内存操作
- 采用可重入锁ReentrantLock和Condition实现访问控制
LinkedBlockingDeque常用方法
- addFirst(E e):添加元素到双端队列的头部,如果队列已满,则阻塞直到队列空闲
- addLast(E e):添加元素到双端队列的尾部,如果队列已满,则阻塞直到队列空闲
- pollFirst():从双端队列的头部移除并返回一个元素,如果队列为空,则阻塞直到队列非空
- pollLast():从双端队列的尾部移除并返回一个元素,如果队列为空,则阻塞直到队列非空
- peekFirst():返回双端队列头部的元素,如果队列为空,则返回null
- peekLast():返回双端队列尾部的元素,如果队列为空,则返回null
LinkedBlockingDeque示例说明
示例1
import java.util.concurrent.LinkedBlockingDeque;
public class LinkedBlockingDequeDemo {
public static void main(String[] args) throws InterruptedException {
LinkedBlockingDeque<Integer> deque = new LinkedBlockingDeque<>(3);
deque.addFirst(1);
deque.addFirst(2);
deque.addLast(3);
System.out.println(deque.peekFirst()); //输出2
System.out.println(deque.peekLast()); //输出3
deque.takeFirst();
System.out.println(deque.peekFirst()); //输出1
deque.takeLast();
System.out.println(deque.peekLast()); //输出1
}
}
以上代码展示了如何使用LinkedBlockingDeque添加、移除元素,并且获取队列头部和尾部的元素。
示例2
import java.util.concurrent.LinkedBlockingDeque;
public class LinkedBlockingDequeDemo {
public static void main(String[] args) throws InterruptedException {
LinkedBlockingDeque<Integer> deque = new LinkedBlockingDeque<>(2);
new Thread(() -> {
try {
deque.addLast(1);
deque.addLast(2);
System.out.println("Thread1:添加元素1和2");
} catch (Exception e) {
e.printStackTrace();
}
}).start();
new Thread(() -> {
try {
Thread.sleep(2000);
deque.takeFirst();
System.out.println("Thread2:移除元素1");
} catch (Exception e) {
e.printStackTrace();
}
}).start();
}
}
以上代码展示了如何使用LinkedBlockingDeque实现线程之间的协作,在一个线程添加元素之后,另一个线程移除队列头部的元素。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java concurrency集合之LinkedBlockingDeque_动力节点Java学院整理 - Python技术站