java 基礎- BlockingQueue 阻塞隊列
阻塞隊列
阻塞隊列: 當隊列中沒有值時就等待,當隊列中有值時變得 available
阻塞隊列特點
- 阻塞
- 線程安全(BlockingQueue 接口定義的方法是線程安全的,但是繼承 Collection 接口的方法就不一定是原子操作,需要額外的同步操作,如 addAll 操作)
- 不允許插入的元素爲 Null,當插入 Null 時,拋出
NullPointerException
異常 - 可以是有界隊列
- 內存一致性的影響: 線程加入對象到 BlockingQueue 的操作要早於其他線程訪問 BlockingQueue 或者是其他線程對 BlockingQueue 的 remove 操作
阻塞隊列方法
action | Throws exception | Special value | Blocks | Times out |
---|---|---|---|---|
Insert | add(e) | offer(e) | put(e) | offer(e, time, unit) |
Remove | remove() | poll() | take() | poll(time, unit) |
Examine | element() | peek() | not applicable | not applicable |
實現
- ArrayBlockingQueue
- LinkedBlockingQueue
- PriorityBlockingQueue
- DelayQueue
- SynchronousQueue
- LinkedTransferQueue
- LinkedBlockingDeque