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