阻塞隊列
說到隊列,他有一個很顯著的特點就是先進先出
,由此利用這種特性,可以用來進行處理完成一些操作。阻塞隊列就是其中之一
下面就是java中定義的接口
* @since 1.5
* @author Doug Lea
* @param <E> the type of elements held in this collection
*/
public interface BlockingQueue<E> extends Queue<E> {
它的主要方法如下:
作用
它的作用概括起來就是
- 添加到滿時無法添加進行等待/ 報異常/ 返回是否成功
- 獲取到空時無法獲取進行等待/ 報異常/ 返回是否成功
就其實現之一的ArrayBlockingQueue而言
ArrayBlockingQueue
添加與刪除時
public static void main(String[] args) throws InterruptedException {
BlockingQueue<String> blankQueue = new ArrayBlockingQueue<>(5);
blankQueue.take(); // 一直等待直到有值
blankQueue.remove(); //java.util.NoSuchElementException
blankQueue.poll(); // 取不到直接跳過
blankQueue.poll(2,TimeUnit.SECONDS);//2 秒取不到直接跳過
BlockingQueue<String> fullQueue = new ArrayBlockingQueue<>(5,false,Arrays.asList("1","2","3","4","5"));
fullQueue.add("6"); //java.lang.IllegalStateException: Queue full
fullQueue.offer("6");// 插不了直接跳過
fullQueue.offer("6",2,TimeUnit.SECONDS); // 2秒內插不了直接跳過
fullQueue.put("6");// 一直等待到可以插入
}
其他的阻塞隊列
- LinkedBlockingQueue // 默認大小無限制 鏈表結構
- SynchronousQueue // 只有一個元素
- ArrayBlockingQueue // 自定義大小 數組結構
- LinkedBlockingDeque
- LinkedTransferQueue
- DelayQueue
- PriorityBlockingQueue //優先級 元素可進行比較