亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java ArrayBlockingQueue的方法及缺點分析

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

提到ArrayBlockingQueue的方法,想必大家都不陌生,我們在入隊和出隊的時候,接觸了不少這方面的函數(shù)。當然ArrayBlockingQueue中的方法也不止于此,今天我們就全部為大家羅列出來,也算是做一個學習方向上的指引。然后就其中的peek方法帶來實例介紹,并說明ArrayBlockingQueue使用的不足之處。

1.ArrayBlockingQueue函數(shù)列表

// 創(chuàng)建一個帶有給定的(固定)容量和默認訪問策略的 ArrayBlockingQueue。
ArrayBlockingQueue(int capacity)
// 創(chuàng)建一個具有給定的(固定)容量和指定訪問策略的 ArrayBlockingQueue。
ArrayBlockingQueue(int capacity, boolean fair)
// 創(chuàng)建一個具有給定的(固定)容量和指定訪問策略的 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)
// 最多從此隊列中移除給定數(shù)量的可用元素,并將這些元素添加到給定 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)
// 返回在無阻塞的理想情況下(不存在內(nèi)存或資源約束)此隊列能接受的其他元素數(shù)量。
int remainingCapacity()
// 從此隊列中移除指定元素的單個實例(如果存在)。
boolean remove(Object o)
// 返回此隊列中元素的數(shù)量。
int size()
// 獲取并移除此隊列的頭部,在元素變得可用之前一直等待(如果有必要)。
E take()
// 返回一個按適當順序包含此隊列中所有元素的數(shù)組。
Object[] toArray()
// 返回一個按適當順序包含此隊列中所有元素的數(shù)組;返回數(shù)組的運行時類型是指定數(shù)組的運行時類型。
<T> T[] toArray(T[] a)
// 返回此 collection 的字符串表示形式。
String toString()

2.peek方法實例

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

//獲取元素,元素不出隊
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缺點

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

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

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

ArrayBlockingQueue用法擴展:

1、ArrayBlockingQueue(int)

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

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

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

2、ArrayBlockingQueue(int,boolean)

接收兩個參數(shù),一個整型,一個boolean類型,前邊已經(jīng)知道整型參數(shù)是隊列的長度,那么boolean類型參數(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òu)造方法中進行了相關(guān)邏輯實現(xiàn),對items進行了數(shù)組初始化,boolean類型的參數(shù)是作為可重入鎖的參數(shù)進行初始化,規(guī)定可重入鎖是公平還是不公平,默認為false,另外初始化了notEmpty、notFull兩個信號量。

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

相關(guān)文章

  • 一文探索Apache HttpClient如何設(shè)定超時時間

    一文探索Apache HttpClient如何設(shè)定超時時間

    Apache HttpClient是一個流行的Java庫,用于發(fā)送HTTP請求,這篇文章主要為大家介紹了Apache HttpClient如何設(shè)定超時時間,感興趣的小伙伴可以學習一下
    2023-10-10
  • Java設(shè)計模式之初識行為型模式

    Java設(shè)計模式之初識行為型模式

    今天帶大家學習Java設(shè)計模式的相關(guān)知識點,文中對Java行為型模式做了非常詳細的介紹及代碼示例,對正在學習java的小伙伴們很有幫助,需要的朋友可以參考下
    2021-06-06
  • Java中的ReadWriteLock讀寫鎖詳解

    Java中的ReadWriteLock讀寫鎖詳解

    這篇文章主要介紹了Java中的ReadWriteLock讀寫鎖詳解,ReadWriteLock也是一個接口,提供了readLock和writeLock兩種鎖的操作機制,一個資源可以被多個線程同時讀,或者被一個線程寫,但是不能同時存在讀和寫線程,需要的朋友可以參考下
    2023-12-12
  • Java小程序計算圓周率代碼

    Java小程序計算圓周率代碼

    這篇文章主要介紹了Java小程序計算圓周率代碼,有兩種實現(xiàn)方法,喜歡的朋友可以參考下。
    2017-09-09
  • SpringBoot?@Transactional事務(wù)不生效排查方式

    SpringBoot?@Transactional事務(wù)不生效排查方式

    這篇文章主要介紹了SpringBoot?@Transactional事務(wù)不生效排查方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Springboot+AOP實現(xiàn)返回數(shù)據(jù)提示語國際化的示例代碼

    Springboot+AOP實現(xiàn)返回數(shù)據(jù)提示語國際化的示例代碼

    這篇文章主要介紹了Springboot+AOP實現(xiàn)返回數(shù)據(jù)提示語國際化的示例代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • SpringBoot2.0+阿里巴巴Sentinel動態(tài)限流實戰(zhàn)(附源碼)

    SpringBoot2.0+阿里巴巴Sentinel動態(tài)限流實戰(zhàn)(附源碼)

    這篇文章主要介紹了SpringBoot2.0+阿里巴巴Sentinel動態(tài)限流實戰(zhàn)(附源碼),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • 如何在Spring Boot項目中使用Spring AI

    如何在Spring Boot項目中使用Spring AI

    Spring AI是Spring框架中用于集成和使用人工智能和機器學習功能的組件,它提供了一種簡化的方式來與AI模型進行交互,這篇文章主要介紹了Spring Boot 在項目中使用Spring AI,需要的朋友可以參考下
    2024-05-05
  • springboot服務(wù)正常啟動之后,訪問服務(wù)url無響應問題及解決

    springboot服務(wù)正常啟動之后,訪問服務(wù)url無響應問題及解決

    這篇文章主要介紹了springboot服務(wù)正常啟動之后,訪問服務(wù)url無響應問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java中的Semaphore信號量簡析

    Java中的Semaphore信號量簡析

    這篇文章主要介紹了Java中的Semaphore信號量簡析,Semaphore:信號量,用來限制能同時訪問共享資源的線程上限,使用Semaphore實現(xiàn)簡單連接池,對比享元模式下的實現(xiàn)(用wait和notify),性能和可讀性要更好,需要的朋友可以參考下
    2023-12-12

最新評論