BolckingQueue接口
BlockingQueue 是juc下所有隊列的接口,這些隊列包括:
- ArrayBolckingQueue
- DelayedWorkQueue
- DelayQueue
- FariBlockQueue
- LinkedBlockingQueue
- PriorityBolckingQueue
- SychronousQueue
先來熟悉一下相關(guān)的接口方法標(biāo)準(zhǔn)
- boolean add(E e)
從函數(shù)說明可以看出友题,這個方法是立即返回操作結(jié)果的番捂,如果是在有界隊列鞭呕,隊列滿的時候,是直接拋出IllegalStateException異常的,所以建議在有界隊列的時候娄琉,使用offer()
- boolean offer(E e) 方法說明又強調(diào)了一次融击,如果是有界隊列筑公,這個比add方法好。砚嘴。我知道了十酣。。如果沒有空間了际长,會一直阻塞耸采,直到拋出異常
- 還有另外一個offer方法
boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException;
這個offer方法是可設(shè)置等待時間,并且是可中斷的工育,成功入隊返回true虾宇,超時失敗false
- put(E e) 隊列滿的時候一直等待直到中斷異常
- E take() 方法,返回檢索獲取到隊列頭的元素并且移除他如绸,如果沒有可獲取的元素嘱朽,還是一直傻等,直到拋出中斷異常
- E poll(long timeout, TimeUnit unit)方法怔接,等待一個指定的時間段搪泳,如果在等待過程中中斷了,拋出中斷異常扼脐,如果等待時間還沒有獲取到岸军,返回null
總結(jié)如下:
put(E e)和take()一個是入隊一個出對,是會一直傻等直到拋出中斷異常的
offer(E e, Long timeout, TimeUnit unit)和poll(long timeout, TimeUnit unit)是在一個時間段內(nèi)等瓦侮,不會一直傻等的