📅  最后修改于: 2023-12-03 15:16:20.754000             🧑  作者: Mango
BlockingDeque
pollLast()
方法及示例BlockingDeque
接口是 Deque
接口的一个子接口,表示一个具有阻塞功能的双端队列。
BlockingDeque
接口提供了一组方法来在队列尾部插入、移除和检查元素,以及在队列头部插入、移除和检查元素。其中,pollLast()
方法用于从队列的尾部获取并移除一个元素,如果队列为空,则会阻塞等待直到有可用元素。
pollLast()
方法的语法如下:
E pollLast() throws InterruptedException
该方法不接受任何参数。
如果队列不为空,则返回队列尾部的元素;如果队列为空,则会阻塞等待直到有可用元素,此时返回获取到的元素。如果在等待期间线程被中断,则会抛出 InterruptedException
异常。
下面是一个示例代码,展示了如何使用 BlockingDeque
的 pollLast()
方法:
import java.util.concurrent.BlockingDeque;
import java.util.concurrent.LinkedBlockingDeque;
public class BlockingDequeExample {
public static void main(String[] args) {
BlockingDeque<String> deque = new LinkedBlockingDeque<>();
// 启动一个消费者线程
new Thread(() -> {
try {
String element = deque.pollLast(); // 从队列尾部获取并移除元素
System.out.println("Consumed: " + element);
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
// 添加元素到队列尾部
deque.offer("Element 1");
deque.offer("Element 2");
deque.offer("Element 3");
System.out.println("Elements in deque: " + deque);
// 等待一段时间,以便消费者线程获取元素
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Elements in deque after consumption: " + deque);
}
}
运行上述代码,将得到以下输出:
Elements in deque: [Element 1, Element 2, Element 3]
Consumed: Element 3
Elements in deque after consumption: [Element 1, Element 2]
在上面的示例中,我们创建了一个 LinkedBlockingDeque
对象,并向其中添加了三个元素。然后,我们启动一个消费者线程,该线程使用 pollLast()
方法从队列的尾部获取并移除一个元素,并打印出消费的元素。最后,我们打印队列中剩余的元素。注意,在消费者线程启动前添加的元素可能已经被消费了。