阻塞隊列
首先它是一個隊列,而一個阻塞隊列在數據結構中所起的作用大致如下圖:
當阻塞隊列是空時,從隊列中獲取元素的操作將會被阻塞。
當阻塞隊列是滿時,往隊列中添加元素的操作將會被阻塞。
在多線程領域:所謂阻塞,在某些情況下會掛起線程(即阻塞),一旦條件滿足,被掛起的線程又會自動被喚醒。
爲什麼需要BlockingQueue
好處是:我們不需要關心什麼時候需要阻塞線程,什麼時候需要喚醒線程,因爲這一切BlockingQueue都給你一手包辦了。
在concurrent包發佈以前,在多線程環境下,我們每個程序員都必須去自己控制這些細節,尤其還要兼顧效率和線程安全,而這會給我們的程序帶來不小的複雜度。
種類分析:
- ArrayBlockingQueue:由數組結構組成的有界阻塞隊列。
- LinkedBlockingQueue:由鏈表結構組成的有界阻塞隊列。(默認大小爲:Integer.MAX_VALUE)
- priorityBlockingQueue:支持優先級排序的無界阻塞隊列。
- DelayQueue:使用優先級隊列實現的延遲無界阻塞隊列。
- SynchronousQueue:不存儲元素的阻塞隊列,也即單個元素的隊列。
- LinkedTransferQueue:由鏈表結構組成的無界阻塞隊列。
- LinkedBlockingDeque:由鏈表結構組成的雙向阻塞隊列。