BlockingQueue 通常用于一個線程生產(chǎn)對象,而另外一個線程消費(fèi)這些對象的場景。
下圖是對這個原理的闡述:

一個線程往里邊放,另外一個線程從里邊取的一個 BlockingQueue。
一個線程將會持續(xù)生產(chǎn)新對象并將其插入到隊列之中,直到隊列達(dá)到它所能容納的臨界點(diǎn)。也就是說,它是有限的。如果該阻塞隊列到達(dá)了其臨界點(diǎn),負(fù)責(zé)生產(chǎn)的線程將會在往里邊插入新對象時發(fā)生阻塞。它會一直處于阻塞之中,直到負(fù)責(zé)消費(fèi)的線程從隊列中拿走一個對象。負(fù)責(zé)消費(fèi)的線程將會一直從該阻塞隊列中拿出對象。如果消費(fèi)線程嘗試去從一個空的隊列中提取對象的話,這個消費(fèi)線程將會處于阻塞之中,直到一個生產(chǎn)線程把一個對象丟進(jìn)隊列。

京公網(wǎng)安備 11010802030320號