BlockingDeque 繼承 Deque 和 BlockingQueue,支持兩端操作:
push()/pop() 等同 addFirst()/removeFirst()addLast()/removeFirst()putFirst()、putLast()、takeFirst()、takeLast()Java 6 引入,實現類:LinkedBlockingDeque(鏈表,可選有界)。
import java.util.concurrent.BlockingDeque;
import java.util.concurrent.LinkedBlockingDeque;
public class Test {
public static void main(String[] args) throws InterruptedException {
BlockingDeque bDeque = new LinkedBlockingDeque<>(20);
for (int i = 0; i < 30; i++) {
bDeque.putFirst(i); // 棧頂插入,滿則阻塞
System.out.println("向阻塞棧中添加了元素:" + i);
}
System.out.println("程序到此運行結束,即將退出----");
}
}
向阻塞棧中添加了元素:0
...
向阻塞棧中添加了元素:19
// 程序阻塞於 putFirst(20),棧已滿
與隊列類似,容量20滿後阻塞。異在於插入/移除位置:棧操作棧頂 (First),隊列操作隊尾/隊頭。
| 維度 | BlockingDeque (棧) | BlockingQueue (隊列) |
|---|---|---|
| 數據結構 | LIFO (後進先出) | FIFO (先進先出) |
| 核心操作 | push/pop / putFirst/takeFirst | put/take / add/remove |
| 典型場景 | 深度優先搜索、遞歸替代、回溯 | 生產消費、任務調度、緩存 |
| 雙端優勢 | 兩端均可入出,靈活性高 | 單向流動,語義清晰 |
offerFirst()、pollLast() 等不阻塞版本