📅  最后修改于: 2023-12-03 15:01:54.374000             🧑  作者: Mango
LinkedBlockingDeque
takeFirst()
方法介绍LinkedBlockingDeque
是一个基于链表实现的双端阻塞队列,用于多线程场景下的数据存储和转移。takeFirst()
方法用于从队列的头部取出一个元素,如果队列为空则阻塞等待直到队列有可用元素。
public E takeFirst() throws InterruptedException
InterruptedException
异常。import java.util.concurrent.LinkedBlockingDeque;
public class Example {
public static void main(String[] args) {
LinkedBlockingDeque<Integer> deque = new LinkedBlockingDeque<>();
// 创建并启动一个线程往队列中添加元素
Thread producer = new Thread(() -> {
try {
for (int i = 0; i < 5; i++) {
deque.put(i);
Thread.sleep(1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
});
producer.start();
// 创建并启动一个线程从队列头部取出元素
Thread consumer = new Thread(() -> {
try {
for (int i = 0; i < 5; i++) {
int element = deque.takeFirst();
System.out.println("Element taken: " + element);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
});
consumer.start();
}
}
在上述示例中,一个线程通过 put()
方法向队列中添加元素,另一个线程通过 takeFirst()
方法从队列头部取出元素。如果队列为空,takeFirst()
方法会阻塞等待,直到有可取出的元素。输出结果如下:
Element taken: 0
Element taken: 1
Element taken: 2
Element taken: 3
Element taken: 4
以上就是关于 Java 中 LinkedBlockingDeque
类的 takeFirst()
方法的介绍。此方法可以有效地在多线程环境下进行数据的有序存取。