91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在java項目中使用ArrayBlockingQueue方法

發布時間:2021-01-12 14:51:23 來源:億速云 閱讀:154 作者:Leah 欄目:開發技術

今天就跟大家聊聊有關如何在java項目中使用ArrayBlockingQueue方法,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

1.ArrayBlockingQueue函數列表

// 創建一個帶有給定的(固定)容量和默認訪問策略的 ArrayBlockingQueue。
ArrayBlockingQueue(int capacity)
// 創建一個具有給定的(固定)容量和指定訪問策略的 ArrayBlockingQueue。
ArrayBlockingQueue(int capacity, boolean fair)
// 創建一個具有給定的(固定)容量和指定訪問策略的 ArrayBlockingQueue,它最初包含給定 collection 的元素,并以 collection 迭代器的遍歷順序添加元素。
ArrayBlockingQueue(int capacity, boolean fair, Collection<? extends E> c)
// 將指定的元素插入到此隊列的尾部(如果立即可行且不會超過該隊列的容量),在成功時返回 true,如果此隊列已滿,則拋出 IllegalStateException。
boolean add(E e)
// 自動移除此隊列中的所有元素。
void clear()
// 如果此隊列包含指定的元素,則返回 true。
boolean contains(Object o)
// 移除此隊列中所有可用的元素,并將它們添加到給定 collection 中。
int drainTo(Collection<? super E> c)
// 最多從此隊列中移除給定數量的可用元素,并將這些元素添加到給定 collection 中。
int drainTo(Collection<? super E> c, int maxElements)
// 返回在此隊列中的元素上按適當順序進行迭代的迭代器。
Iterator<E> iterator()
// 將指定的元素插入到此隊列的尾部(如果立即可行且不會超過該隊列的容量),在成功時返回 true,如果此隊列已滿,則返回 false。
boolean offer(E e)
// 將指定的元素插入此隊列的尾部,如果該隊列已滿,則在到達指定的等待時間之前等待可用的空間。
boolean offer(E e, long timeout, TimeUnit unit)
// 獲取但不移除此隊列的頭;如果此隊列為空,則返回 null。
E peek()
// 獲取并移除此隊列的頭,如果此隊列為空,則返回 null。
E poll()
// 獲取并移除此隊列的頭部,在指定的等待時間前等待可用的元素(如果有必要)。
E poll(long timeout, TimeUnit unit)
// 將指定的元素插入此隊列的尾部,如果該隊列已滿,則等待可用的空間。
void put(E e)
// 返回在無阻塞的理想情況下(不存在內存或資源約束)此隊列能接受的其他元素數量。
int remainingCapacity()
// 從此隊列中移除指定元素的單個實例(如果存在)。
boolean remove(Object o)
// 返回此隊列中元素的數量。
int size()
// 獲取并移除此隊列的頭部,在元素變得可用之前一直等待(如果有必要)。
E take()
// 返回一個按適當順序包含此隊列中所有元素的數組。
Object[] toArray()
// 返回一個按適當順序包含此隊列中所有元素的數組;返回數組的運行時類型是指定數組的運行時類型。
<T> T[] toArray(T[] a)
// 返回此 collection 的字符串表示形式。
String toString()

2.peek方法實例

讀取隊列中隊首的元素,不會刪除該元素。

//獲取元素,元素不出隊
public E peek() {
    //上鎖
    final ReentrantLock lock = this.lock;
    lock.lock();
    try {
      //調用itemAt方法獲取元素
      return itemAt(takeIndex); // null when queue is empty
    } finally {
      //釋放鎖資源
      lock.unlock();
    }
  }

3.ArrayBlockingQueue缺點

(1)隊列長度固定且必須在初始化時指定,所以使用之前一定要慎重考慮好容量;

(2)如果消費速度跟不上入隊速度,則會導致提供者線程一直阻塞,且越阻塞越多,非常危險;

(3)只使用了一個鎖來控制入隊出隊,效率較低

ArrayBlockingQueue用法擴展:

1、ArrayBlockingQueue(int)

接收一個整型的參數,這個整型參數指的是隊列的長度,其定義如下,

public ArrayBlockingQueue(int capacity) {
    this(capacity, false);
  }

可以看到這個方法調用的是ArrayBlockingQueue(int,boolean)方法,那么看下這個方法,

2、ArrayBlockingQueue(int,boolean)

接收兩個參數,一個整型,一個boolean類型,前邊已經知道整型參數是隊列的長度,那么boolean類型參數代表什么意思那,其定義如下,

public ArrayBlockingQueue(int capacity, boolean fair) {
    if (capacity <= 0)
      throw new IllegalArgumentException();
    this.items = new Object[capacity];
    lock = new ReentrantLock(fair);
    notEmpty = lock.newCondition();
    notFull = lock.newCondition();
  }

可以看到在這個構造方法中進行了相關邏輯實現,對items進行了數組初始化,boolean類型的參數是作為可重入鎖的參數進行初始化,規定可重入鎖是公平還是不公平,默認為false,另外初始化了notEmpty、notFull兩個信號量。

看完上述內容,你們對如何在java項目中使用ArrayBlockingQueue方法有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

云浮市| 嵊州市| 盐池县| 塔城市| 孟村| 漳州市| 玉山县| 马关县| 顺平县| 岳阳市| 年辖:市辖区| 丹凤县| 台中县| 林甸县| 宁陵县| 渝中区| 阿合奇县| 山西省| 合水县| 彝良县| 仁寿县| 钦州市| 安吉县| 宁德市| 三河市| 来宾市| 张家港市| 黄骅市| 岳阳县| 双鸭山市| 桑日县| 三明市| 佛山市| 得荣县| 南涧| 红桥区| 蒙阴县| 永川市| 灵武市| 武清区| 富裕县|