1. 程式人生 > >百度Java面試題前200頁和答案都在這裡了

百度Java面試題前200頁和答案都在這裡了

1.BlockingQueue佇列和平常佇列一樣都可以用來作為儲存資料的容器,但有時候線上程當中涉及到資料儲存的時候就會出現問題,而BlockingQueue是空的話,如果一個執行緒要從BlockingQueue裡取資料的時候,該執行緒將會被阻斷,並進入等待狀態,直到BlockingQueue裡面有資料存入了後,就會喚醒執行緒進行資料的去除。若BlockingQueue是滿的,如果一個執行緒要將資料存入BlockQueue,該執行緒將會被阻斷,並進入等待狀態,直到BlcokQueue裡面的資料被取出有空間後,執行緒被喚醒後在將資料存入
2.BlockingQueue定義的常用方法詳解: 
        1)add(anObject):把anObject加到BlockingQueue裡,即如果BlockingQueue可以容納,則返回true,否則報異常 
        2)offer(anObject):表示如果可能的話,將anObject加到BlockingQueue裡,即如果BlockingQueue可以容納,則返回true,否則返回false. 
        3)put(anObject):把anObject加到BlockingQueue裡,如果BlockQueue沒有空間,則呼叫此方法的執行緒被阻斷直到BlockingQueue裡面有空間再繼續. 
        4)poll(time):取走BlockingQueue裡排在首位的物件,若不能立即取出,則可以等time引數規定的時間,取不到時返回null 
        5)take():取走BlockingQueue裡排在首位的物件,若BlockingQueue為空,阻斷進入等待狀態直到Blocking有新的物件被加入為止 
3.BlockingQueue有四個具體的實現類,根據不同需求,選擇不同的實現類 
        1)ArrayBlockingQueue:規定大小的BlockingQueue,其建構函式必須帶一個int引數來指明其大小.其所含的物件是以FIFO(先入先出)順序排序的. 
        2)LinkedBlockingQueue:大小不定的BlockingQueue,若其建構函式帶一個規定大小的引數,生成的 BlockingQueue有大小限制,若不帶大小引數,所生成的BlockingQueue的大小由Integer.MAX_VALUE來決定.其所含 的物件是以FIFO(先入先出)順序排序的 
        3)PriorityBlockingQueue:類似於LinkedBlockQueue,但其所含物件的排序不是FIFO,而是依據物件的自然排序順序或者是建構函式的Comparator決定的順序. 
        4)SynchronousQueue:特殊的BlockingQueue,對其的操作必須是放和取交替完成的. 
4.LinkedBlockingQueue和ArrayBlockingQueue比較起來,它們背後所用的資料結構不一樣,導致 LinkedBlockingQueue的資料吞吐量要大於ArrayBlockingQueue,但線上程數量很大時其效能的可預見性低於 ArrayBlockingQueue.