最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java ArrayBlockingQueue的方法及缺點(diǎn)分析

 更新時(shí)間:2021年01月11日 16:16:21   作者:小妮淺淺  
在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于java ArrayBlockingQueue的方法及缺點(diǎn)分析,對(duì)此有興趣的朋友們可以跟著學(xué)習(xí)下。

提到ArrayBlockingQueue的方法,想必大家都不陌生,我們?cè)谌腙?duì)和出隊(duì)的時(shí)候,接觸了不少這方面的函數(shù)。當(dāng)然ArrayBlockingQueue中的方法也不止于此,今天我們就全部為大家羅列出來(lái),也算是做一個(gè)學(xué)習(xí)方向上的指引。然后就其中的peek方法帶來(lái)實(shí)例介紹,并說(shuō)明ArrayBlockingQueue使用的不足之處。

1.ArrayBlockingQueue函數(shù)列表

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

2.peek方法實(shí)例

讀取隊(duì)列中隊(duì)首的元素,不會(huì)刪除該元素。

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

3.ArrayBlockingQueue缺點(diǎn)

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

(2)如果消費(fèi)速度跟不上入隊(duì)速度,則會(huì)導(dǎo)致提供者線程一直阻塞,且越阻塞越多,非常危險(xiǎn);

(3)只使用了一個(gè)鎖來(lái)控制入隊(duì)出隊(duì),效率較低

ArrayBlockingQueue用法擴(kuò)展:

1、ArrayBlockingQueue(int)

接收一個(gè)整型的參數(shù),這個(gè)整型參數(shù)指的是隊(duì)列的長(zhǎng)度,其定義如下,

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

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

2、ArrayBlockingQueue(int,boolean)

接收兩個(gè)參數(shù),一個(gè)整型,一個(gè)boolean類(lèi)型,前邊已經(jīng)知道整型參數(shù)是隊(duì)列的長(zhǎng)度,那么boolean類(lèi)型參數(shù)代表什么意思那,其定義如下,

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();
  }

可以看到在這個(gè)構(gòu)造方法中進(jìn)行了相關(guān)邏輯實(shí)現(xiàn),對(duì)items進(jìn)行了數(shù)組初始化,boolean類(lèi)型的參數(shù)是作為可重入鎖的參數(shù)進(jìn)行初始化,規(guī)定可重入鎖是公平還是不公平,默認(rèn)為false,另外初始化了notEmpty、notFull兩個(gè)信號(hào)量。

到此這篇關(guān)于java ArrayBlockingQueue的方法及缺點(diǎn)分析的文章就介紹到這了,更多相關(guān)java ArrayBlockingQueue的方法及不足點(diǎn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

抚宁县| 廉江市| 乐清市| 海宁市| 沁阳市| 镇远县| 呼图壁县| 博客| 揭西县| 宣化县| 巨鹿县| 东城区| 泰来县| 南陵县| 广东省| 普格县| 武宣县| 临清市| 金昌市| 华亭县| 平顺县| 桓仁| 吴堡县| 景泰县| 深州市| 东城区| 康定县| 博爱县| 九龙城区| 镇江市| 临泉县| 余江县| 六安市| 铁岭市| 本溪市| 曲松县| 武川县| 玉环县| 武安市| 璧山县| 金昌市|