电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

java隊列之queue用法實例分析

瀏覽:3日期:2022-08-29 09:14:46

Queue: 基本上,一個隊列就是一個先入先出(FIFO)的數據結構

Queue接口與List、Set同一級別,都是繼承了Collection接口。LinkedList實現了Deque接 口。

Queue的實現

1、沒有實現的阻塞接口的LinkedList: 實現了java.util.Queue接口和java.util.AbstractQueue接口

內置的不阻塞隊列: PriorityQueue 和 ConcurrentLinkedQueuePriorityQueue 和 ConcurrentLinkedQueue 類在 Collection Framework 中加入兩個具體集合實現。PriorityQueue 類實質上維護了一個有序列表。加入到 Queue 中的元素根據它們的天然排序(通過其 java.util.Comparable 實現)或者根據傳遞給構造函數的 java.util.Comparator 實現來定位。ConcurrentLinkedQueue 是基于鏈接節點的、線程安全的隊列。并發訪問不需要同步。因為它在隊列的尾部添加元素并從頭部刪除它們,所以只要不需要知道隊列的大 小,ConcurrentLinkedQueue 對公共集合的共享訪問就可以工作得很好。收集關于隊列大小的信息會很慢,需要遍歷隊列。

2)實現阻塞接口的:

java.util.concurrent 中加入了 BlockingQueue 接口和五個阻塞隊列類。它實質上就是一種帶有一點扭曲的 FIFO 數據結構。不是立即從隊列中添加或者刪除元素,線程執行操作阻塞,直到有空間或者元素可用。五個隊列所提供的各有不同:

* ArrayBlockingQueue :一個由數組支持的有界隊列。* LinkedBlockingQueue :一個由鏈接節點支持的可選有界隊列。* PriorityBlockingQueue :一個由優先級堆支持的無界優先級隊列。* DelayQueue :一個由優先級堆支持的、基于時間的調度隊列。* SynchronousQueue :一個利用 BlockingQueue 接口的簡單聚集(rendezvous)機制。

java隊列之queue用法實例分析

下表顯示了jdk1.5中的阻塞隊列的操作:

add 增加一個元索 如果隊列已滿,則拋出一個IIIegaISlabEepeplian異常remove 移除并返回隊列頭部的元素 如果隊列為空,則拋出一個NoSuchElementException異常element 返回隊列頭部的元素如果隊列為空,則拋出一個NoSuchElementException異常offer 添加一個元素并返回true 如果隊列已滿,則返回falsepoll 移除并返問隊列頭部的元素 如果隊列為空,則返回nullpeek返回隊列頭部的元素如果隊列為空,則返回nullput 添加一個元素 如果隊列滿,則阻塞take 移除并返回隊列頭部的元素 如果隊列為空,則阻塞

remove、element、offer、poll、peek其實是屬于Queue接口。

阻塞隊列的操作可以根據它們的響應方式分為以下三類:aad、removee和element操作在你試圖為一個已滿的隊列增加元素或從空隊列取得元素時 拋出異常。當然,在多線程程序中,隊列在任何時間都可能變成滿的或空的,所以你可能想使用offer、poll、peek方法。這些方法在無法完成任務時 只是給出一個出錯示而不會拋出異常。

注意:poll和peek方法出錯進返回null。因此,向隊列中插入null值是不合法的

最后,我們有阻塞操作put和take。put方法在隊列滿時阻塞,take方法在隊列空時阻塞。

LinkedBlockingQueue的容量是沒有上限的(說的不準確,在不指定時容量為Integer.MAX_VALUE,不要然的話在put時怎么會受阻呢),但是也可以選擇指定其最大容量,它是基于鏈表的隊列,此隊列按 FIFO(先進先出)排序元素。

ArrayBlockingQueue在構造時需要指定容量, 并可以選擇是否需要公平性,如果公平參數被設置true,等待時間最長的線程會優先得到處理(其實就是通過將ReentrantLock設置為true來 達到這種公平性的:即等待時間最長的線程會先操作)。通常,公平性會使你在性能上付出代價,只有在的確非常需要的時候再使用它。它是基于數組的阻塞循環隊 列,此隊列按 FIFO(先進先出)原則對元素進行排序。

PriorityBlockingQueue是一個帶優先級的 隊列,而不是先進先出隊列。元素按優先級順序被移除,該隊列也沒有上限(看了一下源碼,PriorityBlockingQueue是對 PriorityQueue的再次包裝,是基于堆數據結構的,而PriorityQueue是沒有容量限制的,與ArrayList一樣,所以在優先阻塞 隊列上put時是不會受阻的。雖然此隊列邏輯上是無界的,但是由于資源被耗盡,所以試圖執行添加操作可能會導致 OutOfMemoryError),但是如果隊列為空,那么取元素的操作take就會阻塞,所以它的檢索操作take是受阻的。另外,往入該隊列中的元 素要具有比較能力。

DelayQueue(基于PriorityQueue來實現的)是一個存放Delayed 元素的無界阻塞隊列,只有在延遲期滿時才能從中提取元素。該隊列的頭部是延遲期滿后保存時間最長的 Delayed 元素。如果延遲都還沒有期滿,則隊列沒有頭部,并且poll將返回null。當一個元素的 getDelay(TimeUnit.NANOSECONDS) 方法返回一個小于或等于零的值時,則出現期滿,poll就以移除這個元素了。此隊列不允許使用 null 元素。

java隊列之queue用法實例分析

一個例子:

package com.yao;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class BlockingQueueTest { /** 定義裝蘋果的籃子 */ public static class Basket{ // 籃子,能夠容納3個蘋果 BlockingQueue<String> basket = new ArrayBlockingQueue<String>(3); // 生產蘋果,放入籃子 public void produce() throws InterruptedException{ // put方法放入一個蘋果,若basket滿了,等到basket有位置 basket.put('An apple'); } // 消費蘋果,從籃子中取走 public String consume() throws InterruptedException{ // get方法取出一個蘋果,若basket為空,等到basket有蘋果為止 String apple = basket.take(); return apple; } public int getAppleNumber(){ return basket.size(); } } // 測試方法 public static void testBasket() { // 建立一個裝蘋果的籃子 final Basket basket = new Basket(); // 定義蘋果生產者 class Producer implements Runnable { public void run() { try { while (true) { // 生產蘋果 System.out.println('生產者準備生產蘋果:' + System.currentTimeMillis()); basket.produce(); System.out.println('生產者生產蘋果完畢:' + System.currentTimeMillis()); System.out.println('生產完后有蘋果:'+basket.getAppleNumber()+'個'); // 休眠300ms Thread.sleep(300); } } catch (InterruptedException ex) { } } } // 定義蘋果消費者 class Consumer implements Runnable { public void run() { try { while (true) { // 消費蘋果 System.out.println('消費者準備消費蘋果:' + System.currentTimeMillis()); basket.consume(); System.out.println('消費者消費蘋果完畢:' + System.currentTimeMillis()); System.out.println('消費完后有蘋果:'+basket.getAppleNumber()+'個'); // 休眠1000ms Thread.sleep(1000); } } catch (InterruptedException ex) { } } } ExecutorService service = Executors.newCachedThreadPool(); Producer producer = new Producer(); Consumer consumer = new Consumer(); service.submit(producer); service.submit(consumer); // 程序運行10s后,所有任務停止 try { Thread.sleep(10000); } catch (InterruptedException e) { } service.shutdownNow(); } public static void main(String[] args) { BlockingQueueTest.testBasket(); }}

到此這篇關于java隊列之queue用法實例分析的文章就介紹到這了,更多相關java隊列 queue 內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
主站蜘蛛池模板: 短信通106短信接口验证码接口群发平台_国际短信接口验证码接口群发平台-速度网络有限公司 | 中矗模型-深圳中矗模型设计有限公司 | 单锥双螺旋混合机_双螺旋锥形混合机-无锡新洋设备科技有限公司 | 冷油器,取样冷却器,热力除氧器-连云港振辉机械设备有限公司 | 低浓度恒温恒湿称量系统,强光光照培养箱-上海三腾仪器有限公司 | 防爆大气采样器-防爆粉尘采样器-金属粉尘及其化合物采样器-首页|盐城银河科技有限公司 | 合肥宠物店装修_合肥宠物美容院装修_合肥宠物医院设计装修公司-安徽盛世和居装饰 | 儿童语言障碍训练-武汉优佳加感统文化发展有限公司 | 大巴租车平台承接包车,通勤班车,巴士租赁业务 - 鸿鸣巴士 | 柔性输送线|柔性链板|齿形链-上海赫勒输送设备有限公司首页[输送机] | vr安全体验馆|交通安全|工地安全|禁毒|消防|安全教育体验馆|安全体验教室-贝森德(深圳)科技 | 电子巡更系统-巡检管理系统-智能巡检【金万码】 | 便携式XPDM露点仪-在线式防爆露点仪-增强型烟气分析仪-约克仪器 冰雕-冰雪世界-大型冰雕展制作公司-赛北冰雕官网 | 五轴加工中心_数控加工中心_铝型材加工中心-罗威斯 | 无负压供水设备,消防稳压供水设备-淄博创辉供水设备有限公司 | 钢衬玻璃厂家,钢衬玻璃管道 -山东东兴扬防腐设备有限公司 | 考勤系统_人事考勤管理系统_本地部署BS考勤系统_考勤软件_天时考勤管理专家 | 楼承板-开闭口楼承板-无锡海逵楼承板| 意大利Frascold/富士豪压缩机_富士豪半封闭压缩机_富士豪活塞压缩机_富士豪螺杆压缩机 | 中空玻璃生产线,玻璃加工设备,全自动封胶线,铝条折弯机,双组份打胶机,丁基胶/卧式/立式全自动涂布机,玻璃设备-山东昌盛数控设备有限公司 | 防火窗_耐火窗_防火门厂家_防火卷帘门-重庆三乐门业有限公司 | 无硅导热垫片-碳纤维导热垫片-导热相变材料厂家-东莞市盛元新材料科技有限公司 | 长沙网站建设制作「网站优化推广」-网页设计公司-速马科技官网 | 短信通106短信接口验证码接口群发平台_国际短信接口验证码接口群发平台-速度网络有限公司 | 盘式曝气器-微孔曝气器-管式曝气器-曝气盘-斜管填料 | 郑州市前程水处理有限公司 | 南方珠江-南方一线电缆-南方珠江科技电缆-南方珠江科技有限公司 南汇8424西瓜_南汇玉菇甜瓜-南汇水蜜桃价格 | 背压阀|减压器|不锈钢减压器|减压阀|卫生级背压阀|单向阀|背压阀厂家-上海沃原自控阀门有限公司 本安接线盒-本安电路用接线盒-本安分线盒-矿用电话接线盒-JHH生产厂家-宁波龙亿电子科技有限公司 | 仓储笼_仓储货架_南京货架_仓储货架厂家_南京货架价格低-南京一品仓储设备制造公司 | 网站优化公司_SEO优化_北京关键词百度快速排名-智恒博网络 | 东莞市海宝机械有限公司-不锈钢分选机-硅胶橡胶-生活垃圾-涡电流-静电-金属-矿石分选机 | 插针变压器-家用电器变压器-工业空调变压器-CD型电抗器-余姚市中驰电器有限公司 | 北京网络营销推广_百度SEO搜索引擎优化公司_网站排名优化_谷歌SEO - 北京卓立海创信息技术有限公司 | 全温度恒温培养摇床-大容量-立式-远红外二氧化碳培养箱|南荣百科 | 屏蔽泵厂家,化工屏蔽泵_维修-淄博泵业 | 民用音响-拉杆音响-家用音响-ktv专用音响-万昌科技 | 【官网】博莱特空压机,永磁变频空压机,螺杆空压机-欧能优 | 煤矿支护网片_矿用勾花菱形网_缝管式_管缝式锚杆-邯郸市永年区志涛工矿配件有限公司 | 济南网站建设_济南网站制作_济南网站设计_济南网站建设公司_富库网络旗下模易宝_模板建站 | 废水处理-废气处理-工业废水处理-工业废气处理工程-深圳丰绿环保废气处理公司 | 环压强度试验机-拉链拉力试验机-上海倾技仪器仪表科技有限公司 | 大_小鼠elisa试剂盒-植物_人Elisa试剂盒-PCR荧光定量试剂盒-上海一研生物科技有限公司 |