隊(duì)列:第一章:阻塞隊(duì)列
理論:
阻塞隊(duì)列與普通隊(duì)列的區(qū)別在于,當(dāng)隊(duì)列是空的時(shí),從隊(duì)列中獲取元素的操作將會(huì)被阻塞,或者當(dāng)隊(duì)列是滿時(shí),往隊(duì)列里添加元素的操作會(huì)被阻塞。試圖從空的阻塞隊(duì)列中獲取元素的線程將會(huì)被阻塞,直到其他的線程往空的隊(duì)列插入新的元素。同樣,試圖往已滿的阻塞隊(duì)列中添加新元素的線程同樣也會(huì)被阻塞,直到其他的線程使隊(duì)列重新變得空閑起來,如從隊(duì)列中移除一個(gè)或者多個(gè)元素,或者完全清空隊(duì)列,下圖展示了如何通過阻塞隊(duì)列來合作:
線程1往阻塞隊(duì)列中添加元素,而線程2從阻塞隊(duì)列中移除元素
常用的隊(duì)列主要有以下兩種:
(當(dāng)然通過不同的實(shí)現(xiàn)方式,還可以延伸出很多不同類型的隊(duì)列,DelayQueue就是其中的一種)
先進(jìn)先出(FIFO):先插入的隊(duì)列的元素也最先出隊(duì)列,類似于排隊(duì)的功能。從某種程度上來說這種隊(duì)列也體現(xiàn)了一種公平性。
后進(jìn)先出(LIFO):后插入隊(duì)列的元素最先出隊(duì)列,這種隊(duì)列優(yōu)先處理最近發(fā)生的事件。
好處:
接口結(jié)構(gòu)和實(shí)現(xiàn)類: