BlockingQueue學習
什么是阻塞佇列?

執行緒1往阻塞佇列中添加元素,而執行緒2從阻塞佇列中移除元素,
當阻塞佇列是空時,從佇列中獲取元素的操作將會被阻塞,
當阻塞佇列是滿時,往佇列里添加元素的操作將會被阻塞,
為什么用?有什么好處?
在多執行緒領域:所謂阻塞,在某些情況下會掛起執行緒(即阻塞),一旦條件滿足,被掛起的執行緒又會自動喚醒,
為什么需要BlockingQueue
好處是我們不需要關心什么時候需要阻塞執行緒,什么時候需要喚醒執行緒,因為這一切BlockingQueue都給你一手包辦了,
在concurrent包發布以前,在多執行緒環境下,我們每個程式員都必須去自己控制這些細節,尤其還要兼顧效率和執行緒安全,而這會給我們的程式帶來不小的復雜度,
常用型別
| 名稱 | 簡述 |
|---|---|
| ArrayBlockingQueue | 由陣列結構組成的有界阻塞佇列 |
| LinkedBlockingQueue | 由鏈表結構組成的有界(大小默認為Integer.MAX_VALUE)阻塞佇列 |
| PriorityBlockingQueue | 支持優先級排序的無界阻塞佇列 |
| DelayQueue | 使用優先級佇列實作的延遲無界阻塞佇列 |
| SynchronousQueue | 不存盤元素的阻塞佇列,也即單個元素的佇列 |
| LinkedTransferQueue | 由鏈表結構組成的無界阻塞佇列 |
| LinkedBlockingDeque | 由鏈表結構組成的雙向阻塞佇列 |
核心方法
| 方法型別 | 拋出例外 | 特殊值 | 阻塞 | 超時 |
|---|---|---|---|---|
| 插入 | add(e) | offer(e) | put(e) | offer(e,time,unit) |
| 移除 | remove() | poll() | take() | poll(time,unit) |
| 檢查 | element() | peek() | 不可用 | 不可用 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/256746.html
標籤:其他
