JAVA之阻塞隊列

阻塞隊列

首先它是一個隊列,而一個阻塞隊列在數據結構中所起的作用大致如下圖:

當阻塞隊列是空時,從隊列中獲取元素的操作將會被阻塞。

當阻塞隊列是滿時,往隊列中添加元素的操作將會被阻塞。

在多線程領域:所謂阻塞,在某些情況下會掛起線程(即阻塞),一旦條件滿足,被掛起的線程又會自動被喚醒

爲什麼需要BlockingQueue

好處是:我們不需要關心什麼時候需要阻塞線程,什麼時候需要喚醒線程,因爲這一切BlockingQueue都給你一手包辦了。

在concurrent包發佈以前,在多線程環境下,我們每個程序員都必須去自己控制這些細節,尤其還要兼顧效率和線程安全,而這會給我們的程序帶來不小的複雜度。

 

種類分析:

  1. ArrayBlockingQueue:由數組結構組成的有界阻塞隊列。
  2. LinkedBlockingQueue:由鏈表結構組成的有界阻塞隊列。(默認大小爲:Integer.MAX_VALUE)
  3. priorityBlockingQueue:支持優先級排序的無界阻塞隊列。
  4. DelayQueue:使用優先級隊列實現的延遲無界阻塞隊列。
  5. SynchronousQueue:不存儲元素的阻塞隊列,也即單個元素的隊列。
  6. LinkedTransferQueue:由鏈表結構組成的無界阻塞隊列。
  7. LinkedBlockingDeque:由鏈表結構組成的雙向阻塞隊列。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章