阻塞佇列
方法\處理方式
丟擲異常
返回特殊值
一直阻塞
超時退出
插入方法
add(e)
offer(e)
put(e)
offer(e,time,unit)
移除方法
remove()
poll()
take()
poll(time,unit)
檢查方法
element()
peek()
不可用不可用
丟擲異常:
生產者在add
時當佇列滿時會丟擲異常;消費者當佇列空時會丟擲異常
返回特殊值:執行緒不會被阻塞
生產者在offer
的時候,如果佇列滿時會返回
false;消費者當佇列空時會返回null
一直阻塞:
生產者在put
時當佇列滿時會一直等待,知道佇列不滿、響應中斷退出;消費者當佇列空時會一直等待,直到有資料或者響應中斷
超時退出:
生產者在offer
時,如果佇列滿時會等待
time
時間,單位是
unit,
如果等待這些時間後仍然是滿的會返回
false;消費者當佇列空時會等待time
時間,單位是
unit,
如果仍然是空會返回
null
注意:
返回特殊值和一直阻塞的區別是,如果是offer/poll當不滿足條件時不會被阻塞,而是直接返回true或者false null或者具體值,而put/take會一直被阻塞
put/take
public class querytest catch (exception e) }}
}).start();
new thread(new runnable() catch (interruptedexception e)
}}).start();
try catch (interruptedexception e)
}}
結果:
thread-0---put suc
thread-0---put suc
thread-0---put suc
thread-0---put suc
thread-1 獲取資料--->0
thread-0---put suc//阻塞,等待滿足條件
offer/take
public class querytest catch (exception e) }}
}).start();
new thread(new runnable() catch (interruptedexception e)
}}).start();
try catch (interruptedexception e)
}}
結果:
true---put suc 0
true---put suc 1
true---put suc 2
true---put suc 3
false---put suc 4//沒有被阻塞而是直接執行
false---put suc 5
false---put suc 6
false---put suc 7
false---put suc 8
false---put suc 9
thread-1 獲取資料--->0
阻塞佇列BlockingQueue使用
blockingqueue的原理及方法 blockingqueue最終會有四種狀況,丟擲異常 返回特殊值 阻塞 超時,下表總結了這些方法 丟擲異常 特殊值阻塞 超時插入add e offer e put e offer e,time,unit 移除remove poll take poll time...
阻塞佇列理論以及使用
在多執行緒領域,所謂阻塞,在某些情況下會掛起執行緒 即阻塞 一旦滿足條件,被掛起的執行緒又會自動被喚醒。為什麼需要blockingqueue?好處是我們不需要關心什麼時候需要阻塞執行緒,什麼時候需要喚醒執行緒,因為這一切blockingqueue已經做好阻塞的控制。黃色標記的是重點!arrayblo...
等待佇列 阻塞非阻塞
阻塞 裝置驅動不阻塞,使用者想獲取裝置資源只能不停的查詢,這無謂的消耗cpu資源。而阻塞訪問,不能獲取資源的程序將進入休眠,它將cpu資源 禮讓 給其他程序 喚醒程序的地方最大可能發生在中斷裡面,因為硬體資源獲得的同時往往伴隨著乙個中斷 定義頭 wait queue head t queue 初始化...