国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

java ArrayBlockingQueue的方法及缺點分析

瀏覽:40日期:2022-08-18 15:21:59

提到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)// 返回在無阻塞的理想情況下(不存在內存或資源約束)此隊列能接受的其他元素數(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 { //調用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); }

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

2、ArrayBlockingQueue(int,boolean)

接收兩個參數(shù),一個整型,一個boolean類型,前邊已經知道整型參數(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(); }

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

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

標簽: Java
相關文章:
主站蜘蛛池模板: 久久久久99精品成人片三人毛片 | 国产高清免费视频 | 男女男精品视频网站 | 久久aa毛片免费播放嗯啊 | 久久中文字幕久久久久91 | 天天夜天干天天爽 | 久久精品一区二区三区四区 | 亚洲第一页乱 | 黄色成人在线 | 亚洲精品色一区二区三区 | 波多野结衣在线观看高清免费资源 | 久草在线视频资源站 | 欧美成人免费全部色播 | 波多野结衣在线观看高清免费资源 | 一级爱| 欧美在线视频免费 | 国产一级毛片午夜 | 欧美在线一区二区三区欧美 | 欧美激情性色生活片在线观看 | 色偷偷亚洲偷自拍 | 2021国产精品一区二区在线 | 国产精品麻豆一区二区三区v视界 | 91精品国产色综合久久 | 国产啪精品视频网免费 | 日本免费人成黄页网观看视频 | 日本一级爽毛片在线看 | 亚洲欧美国产高清va在线播放 | 青青草国产免费国产是公开 | 拍拍拍又黄又爽无挡视频免费 | 男人天堂视频在线观看 | 视频一区在线播放 | 亚洲bbbbbxxxxx精品三十七 | 中文字幕在线观看91 | 欧美精品另类hdvideo | 国产亚洲欧美在线视频 | 理论片中文字幕 | 尤蜜网站在线进入免费 | 日本三级2021最新理论在线观看 | www.成人网 | 亚洲成人福利 | 男女超猛烈啪啦啦的免费视频 |