西安優(yōu)秀的集團(tuán)門戶網(wǎng)站建設(shè)服務(wù)商長沙網(wǎng)站推廣
阻塞隊列
- 使用背景
- 作用
- 從阻塞隊列中獲取元素常用的三個方法
- 往阻塞隊列中存放元素的三種方式
使用背景
想要在多個線程之間傳遞數(shù)據(jù),用一般的對象是不行的,比如我們常用的ArrayList和HashMap都不適合由多個線程同時操作,可能會造成數(shù)據(jù)丟失或者數(shù)據(jù)重復(fù)。
這是因?yàn)槎鄠€線程在執(zhí)行的時候,執(zhí)行的順序是隨機(jī)的。我們無法預(yù)判線程執(zhí)行的先后順序??梢哉f這完全取決于CPU。
作用
使用BlockingQueue則可以在多個線程之間安全地傳遞數(shù)據(jù)。一般的隊列是沒有控制線程狀態(tài)的功能的,為了體現(xiàn)這種隊列的強(qiáng)大,讓人一眼望去就知道,它能讓當(dāng)前線程阻塞,于是人們給它加了一個Blocking前綴。
從阻塞隊列中獲取元素常用的三個方法
- take() 死等
- poll(long, TimeUnit) 等一段時間
- poll 不等
往阻塞隊列中存放元素的三種方式
- put() 一直等
- offer(E, long, TimeUnit) 等一段時間
- offer(E) 不等
參考資料:【Java并發(fā)·10】阻塞隊列 基礎(chǔ)