鍍金池/ 問答/Java  Linux/ Java的線程池為什么要用阻塞隊列呢?

Java的線程池為什么要用阻塞隊列呢?

線程池為什么要用阻塞隊列呢?使用一般的隊列也能完整任務?。?/p>

回答
編輯回答
晚風眠

一般的隊列只能保證作為一個有限長度的緩沖區(qū),如果超出了緩沖長度,就無法保留當前的任務了,阻塞隊列通過阻塞可以保留住當前想要繼續(xù)入隊的任務。

2017年11月30日 10:57
編輯回答
不舍棄

簡單的一個場景,消費者一端不一定是時時提交任務就能馬上執(zhí)行,可能有很多因素,比如計算或者IO等資源沒辦法馬上就位,所以有等待,但是任務隊列也不一定就無限大,所以才有了阻塞隊列,在任務池已滿且隊列已經有很多任務時,需要阻塞等待

2018年3月16日 23:53
編輯回答
尕筱澄

阻塞隊列主要是用于生產者-消費者模型的情況。
比如一個線程從一個空的阻塞隊列中取元素,此時線程會被阻塞直到阻塞隊列中有了元素。當隊列中有元素后,被阻塞的線程會自動被喚醒(不需要我們編寫代碼去喚醒)。這樣提供了極大的方便性。
如果使用非阻塞隊列,它不會對當前線程產生阻塞,就必須額外地實現同步策略以及線程間喚醒策略,這個實現起來就非常麻煩。

2018年8月22日 10:01