阻塞隊列
例子,比如ArrayList中put始藕,get
如果列表為空蒲稳,則返回null,阻塞隊列類似【如果沒數(shù)據(jù)或者有其他條件伍派,就阻塞江耀,條件滿足才能取出數(shù)據(jù)】。
阻塞隊列诉植,顧名思義祥国,首先它是一個隊列。先進先出(FIFO)
特點:若BlockingQueue為空晾腔,阻塞系宫,進入等待狀態(tài)直到BlockingQueue有新的數(shù)據(jù)被加入。
核心方法:
1.放入數(shù)據(jù)
(1)offer(anObject):表示如果可能的話,將anObject加到BlockingQueue里,即如果BlockingQueue可以容納,則返回true,否則返回false.(本方法不阻塞當前執(zhí)行方法
的線程)建车;
(2)offer(E o, long timeout, TimeUnit unit):可以設(shè)定等待的時間扩借,如果在指定的時間內(nèi),還不能往隊列中加入BlockingQueue缤至,則返回失敗潮罪。
(3)put(anObject):把anObject加到BlockingQueue里,如果BlockQueue沒有空間,則調(diào)用此方法的線程被阻斷直到BlockingQueue里面有空間再繼續(xù).
2. 獲取數(shù)據(jù)
(1)poll(time):取走BlockingQueue里排在首位的對象,若不能立即取出,則可以等time參數(shù)規(guī)定的時間,取不到時返回null;
(2)poll(long timeout, TimeUnit unit):從BlockingQueue取出一個隊首的對象,如果在指定時間內(nèi)领斥,隊列一旦有數(shù)據(jù)可取嫉到,則立即返回隊列中的數(shù)據(jù)。否則知道時間
超時還沒有數(shù)據(jù)可取月洛,返回失敗何恶。
(3)take():取走BlockingQueue里排在首位的對象,若BlockingQueue為空,阻斷進入等待狀態(tài)直到BlockingQueue有新的數(shù)據(jù)被加入;
(4)drainTo():一次性從BlockingQueue獲取所有可用的數(shù)據(jù)對象(還可以指定獲取數(shù)據(jù)的個數(shù)),通過該方法嚼黔,可以提升獲取數(shù)據(jù)效率细层;不需要多次分批加鎖或釋放鎖。