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