本篇內(nèi)容主要講解“Java的Queue知識(shí)點(diǎn)有哪些”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Java的Queue知識(shí)點(diǎn)有哪些”吧!
創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),東營(yíng)企業(yè)網(wǎng)站建設(shè),東營(yíng)品牌網(wǎng)站建設(shè),網(wǎng)站定制,東營(yíng)網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,東營(yíng)網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
Java提供了Quere,相當(dāng)好用,在1.5版本中又有增強(qiáng)。
Queue: 基本上,一個(gè)隊(duì)列就是一個(gè)先入先出(FIFO)的數(shù)據(jù)結(jié)構(gòu)
offer,add區(qū)別:
一些隊(duì)列有大小限制,因此如果想在一個(gè)滿的隊(duì)列中加入一個(gè)新項(xiàng),多出的項(xiàng)就會(huì)被拒絕。
這時(shí)新的 offer 方法就可以起作用了。它不是對(duì)調(diào)用 add() 方法拋出一個(gè) unchecked 異常,而只是得到由 offer() 返回的 false。
poll,remove區(qū)別:
remove() 和 poll() 方法都是從隊(duì)列中刪除第一個(gè)元素(head)。remove() 的行為與 Collection 接口的版本相似,
但是新的 poll() 方法在用空集合調(diào)用時(shí)不是拋出異常,只是返回 null。因此新的方法更適合容易出現(xiàn)異常條件的情況。
peek,element區(qū)別:
element() 和 peek() 用于在隊(duì)列的頭部查詢(xún)?cè)?。與 remove() 方法類(lèi)似,在隊(duì)列為空時(shí), element() 拋出一個(gè)異常,而 peek() 返回 null。
-----------------------------------------------------------------------------------------
Tiger中有2組Queue的實(shí)現(xiàn):實(shí)現(xiàn)了新的BlockingQueue接口的
和沒(méi)有實(shí)現(xiàn)的
-------------------------------------------------------------
沒(méi)有實(shí)現(xiàn)的阻塞接口的:LinkedList: 實(shí)現(xiàn)了java.util.Queue接口
java.util.AbstractQueue
內(nèi)置的不阻塞隊(duì)列: PriorityQueue 和 ConcurrentLinkedQueue
PriorityQueue 和 ConcurrentLinkedQueue 類(lèi)在 Collection Framework 中加入兩個(gè)具體集合實(shí)現(xiàn)。
PriorityQueue 類(lèi)實(shí)質(zhì)上維護(hù)了一個(gè)有序列表。加入到 Queue 中的元素根據(jù)它們的天然排序(通過(guò)其 java.util.Comparable 實(shí)現(xiàn))或者根據(jù)傳遞給構(gòu)造函數(shù)的 java.util.Comparator 實(shí)現(xiàn)來(lái)定位。
ConcurrentLinkedQueue 是基于鏈接節(jié)點(diǎn)的、線程安全的隊(duì)列。并發(fā)訪問(wèn)不需要同步。因?yàn)樗陉?duì)列的尾部添加元素并從頭部刪除它們,所以只要不需要知道隊(duì)列的大小,ConcurrentLinkedQueue 對(duì)公共集合的共享訪問(wèn)就可以工作得很好。收集關(guān)于隊(duì)列大小的信息會(huì)很慢,需要遍歷隊(duì)列。
------------------------------------------------------------------
實(shí)現(xiàn)阻塞接口的:
新的 java.util.concurrent 包在 Collection Framework 中可用的具體集合類(lèi)中加入了 BlockingQueue 接口和五個(gè)阻塞隊(duì)列類(lèi)。
它實(shí)質(zhì)上就是一種帶有一點(diǎn)扭曲的 FIFO 數(shù)據(jù)結(jié)構(gòu)。不是立即從隊(duì)列中添加或者刪除元素,線程執(zhí)行操作阻塞,直到有空間或者元素可用。
五個(gè)隊(duì)列所提供的各有不同:
* ArrayBlockingQueue:一個(gè)由數(shù)組支持的有界隊(duì)列。
* LinkedBlockingQueue:一個(gè)由鏈接節(jié)點(diǎn)支持的可選有界隊(duì)列。
* PriorityBlockingQueue:一個(gè)由優(yōu)先級(jí)堆支持的無(wú)界優(yōu)先級(jí)隊(duì)列。
* DelayQueue:一個(gè)由優(yōu)先級(jí)堆支持的、基于時(shí)間的調(diào)度隊(duì)列。
* SynchronousQueue:一個(gè)利用 BlockingQueue 接口的簡(jiǎn)單聚集(rendezvous)機(jī)制。
前兩個(gè)類(lèi) ArrayBlockingQueue和 LinkedBlockingQueue幾乎相同,只是在后備存儲(chǔ)器方面有所不同, LinkedBlockingQueue 并不總是有容量界限。無(wú)大小界限的 LinkedBlockingQueue 類(lèi)在添加元素時(shí)永遠(yuǎn)不會(huì)有阻塞隊(duì)列的等待(至少在其中有Integer.MAX_VALUE 元素之前不會(huì))。
PriorityBlockingQueue是具有無(wú)界限容量的隊(duì)列,它利用所包含元素的 Comparable 排序順序來(lái)以邏輯順序維護(hù)元素??梢詫⑺醋?TreeSet 的可能替代物。不過(guò)對(duì) PriorityBlockingQueue 有一個(gè)技巧。從 iterator() 返回的 Iterator 實(shí)例不需要以?xún)?yōu)先級(jí)順序返回元素。如果必須以?xún)?yōu)先級(jí)順序遍歷所有元素,那么讓它們都通過(guò) toArray() 方法并自己對(duì)它們排序,像 Arrays.sort(pq.toArray())。
新的 DelayQueue實(shí)現(xiàn)可能是其中最有意思(也是最復(fù)雜)的一個(gè)。加入到隊(duì)列中的元素必須實(shí)現(xiàn)新的 Delayed 接口(只有一個(gè)方法 —— long getDelay(java.util.concurrent.TimeUnit unit) )。因?yàn)殛?duì)列的大小沒(méi)有界限,使得添加可以立即返回,但是在延遲時(shí)間過(guò)去之前不能從隊(duì)列中取出元素。如果多個(gè)元素完成了延遲,那么最早失效/失效時(shí)間最長(zhǎng)的元素將第一個(gè)取出。實(shí)際上沒(méi)有聽(tīng)上去這樣復(fù)雜。
SynchronousQueue類(lèi)是最簡(jiǎn)單的。它沒(méi)有內(nèi)部容量。它就像線程之間的手遞手機(jī)制。在隊(duì)列中加入一個(gè)元素的生產(chǎn)者會(huì)等待另一個(gè)線程的消費(fèi)者。當(dāng)這個(gè)消費(fèi)者出現(xiàn)時(shí),這個(gè)元素就直接在消費(fèi)者和生產(chǎn)者之間傳遞,永遠(yuǎn)不會(huì)加入到阻塞隊(duì)列中。
----------------------------------------------
實(shí)驗(yàn)結(jié)果:
文檔說(shuō)BlockingQueue的隊(duì)列: 不是立即從隊(duì)列中添加或者刪除元素,線程執(zhí)行操作阻塞,直到有空間或者元素可用。
實(shí)驗(yàn)了一下,使用put、take是這樣子的,線程在等待
而使用offer是立刻返回false的
到此,相信大家對(duì)“Java的Queue知識(shí)點(diǎn)有哪些”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!
當(dāng)前標(biāo)題:Java的Queue知識(shí)點(diǎn)有哪些
本文網(wǎng)址:http://aaarwkj.com/article10/gppigo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、云服務(wù)器、網(wǎng)站收錄、ChatGPT、小程序開(kāi)發(fā)、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)