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