BlockingQueue(阻塞隊列) ArrayBlockingQueue ArrayBlockingQueue用於解決多線程問題:生產者消費者案例

ArrayBlockingQueue對象在初始化的時候需要指定其容量。

對於這個隊列的操作,給出三種操作方法: 插入、移除、檢查

ArrayBlockingQueue對於這三種操作方法,給出了四套解決方案:

拋出異常(插入時隊滿,或移除時隊空 拋出異常 IllegalStateException:Queue full 或 NoSuchElementExcept)

特殊值(插入或移除失敗時,返回特殊值:null或false)

阻塞(插入或移除失敗時,會阻塞等待,等待隊列有空位或者有元素)

超時(插入或移除失敗時,會阻塞等待,等待隊列有空位或者有元素,但是可以設置具體超時等待時間)

方法類型 拋出異常 特殊值 阻塞 超時 插入 add(e) offer(e) put(e) offer(e,time,unit) 移除 remove() poll() take() poll(time,unit) 檢查 element() peek() 不可用 不可用 檢查element() 給出隊首的元素

運行結果:

代碼:

import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; /**

  • @author zkw
  • @Description TODO */ public class BlockingQueueDemo { public static void main(String[] args) throws InterruptedException { BlockingQueue blockingQueue = new ArrayBlockingQueue<>(3); new Thread(()->{ for (int i = 0; i < 4; i++) { try { blockingQueue.offer(i+"", 3, TimeUnit.SECONDS); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); new Thread(()->{ for (int i = 0; i < 4; i++) { try { System.out.println(blockingQueue.poll(3, TimeUnit.SECONDS)); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); } } 一鍵獲取完整項目代碼 java

———————————————— 版權聲明:本文為CSDN博主「向着五星的方向」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。 原文鏈接:https://blog.csdn.net/qq_69748833/article/details/137212303