BolckingQueue接口
BlockingQueue 是juc下所有隊列的接口,這些隊列包括:
- ArrayBolckingQueue
- DelayedWorkQueue
- DelayQueue
- FariBlockQueue
- LinkedBlockingQueue
- PriorityBolckingQueue
- SychronousQueue
先來熟悉一下相關的接口方法標準
- boolean add(E e)
從函數說明可以看出,這個方法是立即返回操作結果的,如果是在有界隊列,隊列滿的時候,是直接拋出IllegalStateException異常的,所以建議在有界隊列的時候,使用offer()
- boolean offer(E e) 方法說明又強調了一次,如果是有界隊列,這個比add方法好。。我知道了。。如果沒有空間了,會一直阻塞,直到拋出異常
- 還有另外一個offer方法
boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException;
這個offer方法是可設置等待時間,并且是可中斷的,成功入隊返回true,超時失敗false
- put(E e) 隊列滿的時候一直等待直到中斷異常
- E take() 方法,返回檢索獲取到隊列頭的元素并且移除他,如果沒有可獲取的元素,還是一直傻等,直到拋出中斷異常
- E poll(long timeout, TimeUnit unit)方法,等待一個指定的時間段,如果在等待過程中中斷了,拋出中斷異常,如果等待時間還沒有獲取到,返回null
總結如下:
put(E e)和take()一個是入隊一個出對,是會一直傻等直到拋出中斷異常的
offer(E e, Long timeout, TimeUnit unit)和poll(long timeout, TimeUnit unit)是在一個時間段內等,不會一直傻等的