在Java多線程應用中,隊列的使用率很高,Java提供的線程安全的Queue能夠分爲阻塞隊列和非阻塞隊列,其中阻塞隊列的典型例子是BlockingQueue,非阻塞隊列的典型例子是ConcurrentLinkedQueue,在實際應用中要根據實際須要選用阻塞隊列或者非阻塞隊列。安全
1)LinkedBlockingQueue 多線程
是一個阻塞的線程安全的隊列,底層應該採用鏈表實現,LinkedBlockingQueue 能夠指定容量,也能夠不指定,不指定的話,默認最大是Integer.MAX_VALUE。線程
看其API的時候發現,添加元素的方法居然有三個:add,put,offer隊列
add方法在添加元素的時候,若超出了度列的長度會直接拋出異常;rem
put方法若向隊尾添加元素的時候發現隊列已經滿了會發生阻塞一直等待空間,以加入元素;io
offer方法在添加元素時,若是發現隊列已滿沒法添加的話,會直接返回false。方法
從隊列中取出並移除頭元素的方法有:poll,remove,takeim
poll: 若隊列爲空,返回null;線程安全
remove:若隊列爲空,拋出NoSuchElementException異常;鏈表
take:若隊列爲空,發生阻塞,等待有元素。