亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

線程小酌之JAVA中的阻塞隊列

2019-11-11 06:02:42
字體:
來源:轉載
供稿:網友

       最近在學習java中自帶的JDK并發包,java.util.concurrent,發現功能很強大,其中之一就是工作中多次用到的線程工具類BlockingQueue。在實際開發工作和面試過程中,經常會考察對于該工具類的使用和理解。

1. 什么是阻塞隊列?

阻塞隊列(BlockingQueue)是一個支持兩個附加操作的隊列。這兩個附加的操作是:在隊列為空時,獲取元素的線程會等待隊列變為非空。當隊列滿時,存儲元素的線程會等待隊列可用。阻塞隊列常用于生產者和消費者的場景,生產者是往隊列里添加元素的線程,消費者是從隊列里拿元素的線程。阻塞隊列就是生產者存放元素的容器,而消費者也只從容器里拿元素。

2.詳解BlockingQueue

BlockingQueue最終會有四種狀況,拋出異常、返回特殊值、阻塞、超時,下表總結了這些方法:

 拋出異常特殊值阻塞超時
插入add(e)offer(e)put(e)offer(e, time, unit)
移除remove()poll()take()poll(time, unit)
檢查element()peek()不可用不可用

       BlockingQueue是個接口,有如下實現類:

       1. ArrayBlockQueue:一個由數組支持的有界阻塞隊列。此隊列按 FIFO(先進先出)原則對元素進行排序。創建其對象必須明確大小,像數組一樣。

       2. LinkedBlockQueue:一個可改變大小的阻塞隊列。此隊列按 FIFO(先進先出)原則對元素進行排序。創建其對象如果沒有明確大小,默認值是Integer.MAX_VALUE。鏈接隊列的吞吐量通常要高于基于數組的隊列,但是在大多數并發應用程序中,其可預知的性能要低。 

       3. PRiorityBlockingQueue:類似于LinkedBlockingQueue,但其所含對象的排序不是FIFO,而是依據對象的自然排序順序或者是構造函數所帶的Comparator決定的順序。

       4. SynchronousQueue:同步隊列。同步隊列沒有任何容量,每個插入必須等待另一個線程移除,反之亦然。

由于LinkedBlockingQueue實現是線程安全的,實現了先進先出等特性,是作為生產者消費者的首選,LinkedBlockingQueue 可以指定容量,也可以不指定,不指定的話,默認最大是Integer.MAX_VALUE,其中主要用到put和take方法,put方法在隊列滿的時候會阻塞直到有隊列成員被消費,take方法在隊列空的時候會阻塞,直到有隊列成員被放進來。

package cn.thread;import java.util.concurrent.BlockingQueue;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.LinkedBlockingQueue;/** * 多線程模擬實現生產者/消費者模型 *   */public class BlockingQueueTest2 {    /**     *      * 定義裝蘋果的籃子     *      */    public class Basket {        // 籃子,能夠容納3個蘋果        BlockingQueue<String> basket = new LinkedBlockingQueue<String>(3);        // 生產蘋果,放入籃子        public void produce() throws InterruptedException {            // put方法放入一個蘋果,若basket滿了,等到basket有位置            basket.put("An apple");        }        // 消費蘋果,從籃子中取走        public String consume() throws InterruptedException {            // take方法取出一個蘋果,若basket為空,等到basket有蘋果為止(獲取并移除此隊列的頭部)            return basket.take();        }    }    // 定義蘋果生產者    class Producer implements Runnable {        private String instance;        private Basket basket;        public Producer(String instance, Basket basket) {            this.instance = instance;            this.basket = basket;        }        public void run() {            try {                while (true) {                    // 生產蘋果                    System.out.println("生產者準備生產蘋果:" + instance);                    basket.produce();                    System.out.println("!生產者生產蘋果完畢:" + instance);                    // 休眠300ms                    Thread.sleep(300);                }            } catch (InterruptedException ex) {                System.out.println("Producer Interrupted");            }        }    }    // 定義蘋果消費者    class Consumer implements Runnable {        private String instance;        private Basket basket;        public Consumer(String instance, Basket basket) {            this.instance = instance;            this.basket = basket;        }        public void run() {            try {                while (true) {                    // 消費蘋果                    System.out.println("消費者準備消費蘋果:" + instance);                    System.out.println(basket.consume());                    System.out.println("!消費者消費蘋果完畢:" + instance);                    // 休眠1000ms                    Thread.sleep(1000);                }            } catch (InterruptedException ex) {                System.out.println("Consumer Interrupted");            }        }    }    public static void main(String[] args) {        BlockingQueueTest2 test = new BlockingQueueTest2();        // 建立一個裝蘋果的籃子        Basket basket = test.new Basket();        ExecutorService service = Executors.newCachedThreadPool();        Producer producer = test.new Producer("生產者001", basket);        Producer producer2 = test.new Producer("生產者002", basket);        Consumer consumer = test.new Consumer("消費者001", basket);        service.submit(producer);        service.submit(producer2);        service.submit(consumer);        // 程序運行5s后,所有任務停止//        try {//            Thread.sleep(1000 * 5);//        } catch (InterruptedException e) {//            e.printStackTrace();//        }//        service.shutdownNow();    }}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人福利在线视频| 国产91av在线| 啪一啪鲁一鲁2019在线视频| 日韩国产精品视频| 欧美一级黄色网| 国产精品嫩草视频| 国产精品美乳在线观看| 日韩精品在线免费观看视频| 成人字幕网zmw| 91精品国产网站| 久久噜噜噜精品国产亚洲综合| 久久中文久久字幕| 色妞色视频一区二区三区四区| 国产精品免费久久久| 国产精品99久久99久久久二8| 亚洲性生活视频| 综合136福利视频在线| 91精品国产乱码久久久久久蜜臀| 久久精品青青大伊人av| 久久综合伊人77777蜜臀| 久久夜精品香蕉| 福利视频导航一区| 国产精品一区二区av影院萌芽| 国产亚洲精品久久久优势| 精品日韩美女的视频高清| 成人两性免费视频| 国产精品久久久久久一区二区| 国产精品6699| 亚洲精品91美女久久久久久久| 亚洲视频欧美视频| 亚洲视频欧美视频| 国产精品视频白浆免费视频| 久久久久久12| 成人久久一区二区三区| 亚洲精品久久久久久久久久久| 亚洲欧美日韩第一区| 久久夜色精品国产| 国产一区二区三区日韩欧美| 国产一区二区三区视频免费| 亚洲天堂2020| 激情av一区二区| 久久99青青精品免费观看| 日韩欧美国产网站| 2019中文字幕免费视频| 久久久亚洲精选| 国产一区深夜福利| 久久久国产精品x99av| 国产在线视频不卡| 亚洲第一色在线| 97精品国产97久久久久久| 日韩中文字幕亚洲| 一区二区三区无码高清视频| 蜜臀久久99精品久久久无需会员| 国产成人jvid在线播放| 亚洲色图17p| 精品国产一区久久久| 日韩在线观看免费网站| 97国产在线观看| 亚洲影院在线看| 在线a欧美视频| 久久91亚洲人成电影网站| 亚洲欧洲一区二区三区在线观看| 日韩精品久久久久久福利| 精品久久久久久久久久国产| 欧美激情精品在线| 北条麻妃一区二区在线观看| 黄色精品在线看| 免费av在线一区| 日韩av有码在线| 精品欧美国产一区二区三区| 中文字幕精品视频| 日韩电视剧在线观看免费网站| 日韩精品免费在线观看| 亚洲va码欧洲m码| 91视频免费在线| 国产视频久久久久久久| 午夜精品久久久99热福利| 亚洲成av人影院在线观看| 亚洲欧美一区二区激情| 国产免费一区视频观看免费| 国产精品九九久久久久久久| 欧美孕妇孕交黑巨大网站| 欧美国产中文字幕| 国产一区二区视频在线观看| 精品日本美女福利在线观看| 神马久久桃色视频| 91av国产在线| 亚洲韩国青草视频| 亚洲男人天堂古典| 欧美视频免费在线| 国产精品一区二区三区免费视频| 97精品免费视频| 欧美视频中文在线看| 欧美性猛交xxxxx免费看| 亚洲美女av在线| 国产精品v片在线观看不卡| 57pao国产精品一区| 91久久精品一区| 91嫩草在线视频| 国产日韩欧美在线视频观看| 狠狠做深爱婷婷久久综合一区| 中文字幕一区二区三区电影| 日韩av综合中文字幕| 亚洲一区二区三区在线免费观看| 国产第一区电影| 欧美在线激情网| 美女性感视频久久久| 久久中文精品视频| 欧美亚洲第一页| 精品视频一区在线视频| 精品成人国产在线观看男人呻吟| 久久男人的天堂| 国产精品九九久久久久久久| 国产精品久久久久久久9999| 亚洲精品美女久久久久| 欧美高清视频在线观看| 日韩毛片中文字幕| 精品国产成人av| 日韩天堂在线视频| 7777免费精品视频| 欧美性xxxxx极品| 韩国福利视频一区| 亚洲三级av在线| 国产在线拍揄自揄视频不卡99| 精品伊人久久97| 国产欧美精品日韩| 91精品国产高清久久久久久| 日本久久久久久久久| 亚洲自拍偷拍第一页| 97精品在线视频| 91欧美精品成人综合在线观看| 伊人av综合网| 欧美肥老妇视频| 亚洲sss综合天堂久久| 日韩日本欧美亚洲| 亚洲第五色综合网| 欧美日韩中文字幕在线视频| 久久av在线播放| 亚洲成人在线视频播放| 在线观看国产精品91| 国产成人精品综合久久久| 欧美wwwxxxx| 色琪琪综合男人的天堂aⅴ视频| 欧美日韩国产一区二区三区| 欧美激情精品久久久久| 国内精品国产三级国产在线专| 国产精品丝袜久久久久久不卡| 欧美高清自拍一区| 亚洲影影院av| 日韩精品在线第一页| 亚洲第一国产精品| 久久久久久这里只有精品| 色噜噜久久综合伊人一本| 亚洲少妇中文在线| 岛国av一区二区三区| 97超碰色婷婷| 国产午夜精品免费一区二区三区| 91欧美视频网站| 亚洲一区二区三区777| 欧美一区二区三区艳史| 欧美极度另类性三渗透| 国内精品久久久久影院优| 亚洲毛片在线观看.| 色与欲影视天天看综合网|