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

首頁 > 編程 > Java > 正文

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

2019-11-11 04:05:37
字體:
來源:轉載
供稿:網友

       最近在學習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
91精品国产综合久久香蕉922| 欧美国产欧美亚洲国产日韩mv天天看完整| 国产精品99久久久久久久久久久久| 欧美高跟鞋交xxxxxhd| 亚洲人成电影在线播放| 亚洲女同精品视频| 伊人久久久久久久久久久| 精品视频在线播放色网色视频| 欧美大全免费观看电视剧大泉洋| 亚洲精品国产免费| 麻豆乱码国产一区二区三区| 日韩美女激情视频| 91沈先生在线观看| 国产成人久久久精品一区| 精品一区二区三区三区| 日韩成人av在线播放| 国产精品96久久久久久| 欧美乱妇40p| 久久中文久久字幕| 国产日韩欧美在线视频观看| 久久久精品国产亚洲| 日韩精品久久久久久久玫瑰园| 日韩精品视频在线免费观看| 亚洲视频欧美视频| 日韩在线播放视频| 午夜精品一区二区三区在线视频| 欧美日韩第一视频| 国产在线精品一区免费香蕉| 欧美性生交大片免网| 亚洲精品综合久久中文字幕| 亚洲天堂av在线免费| 日本欧美国产在线| 国产成人精品在线观看| 国产精品偷伦免费视频观看的| 国产精品精品久久久| 欧美午夜丰满在线18影院| 中文字幕精品在线| 久久久国产精品x99av| 欧美福利视频在线观看| 欧美激情免费在线| 国产一区二区三区欧美| 亚洲人成在线电影| 色妞一区二区三区| 国产视频久久久久久久| 欧美日韩免费网站| 这里只有精品视频| 中文字幕综合一区| 69av成年福利视频| 日本高清视频一区| 午夜免费在线观看精品视频| 亚洲精品电影久久久| 亚洲一区二区三区成人在线视频精品| 欧美在线中文字幕| 国产精品电影观看| 日韩av电影手机在线观看| 91久热免费在线视频| 日韩av电影院| 最近中文字幕mv在线一区二区三区四区| 国产精品一区二区三区在线播放| 久久在线免费视频| 欧美一级在线亚洲天堂| 精品亚洲一区二区三区在线播放| 日韩欧美大尺度| 欧美日韩一区二区在线播放| 琪琪第一精品导航| 91av在线视频观看| 91在线直播亚洲| 一本大道香蕉久在线播放29| 91精品国产99| 亚洲乱码av中文一区二区| 国产精品偷伦免费视频观看的| 欧美成人精品不卡视频在线观看| 最新日韩中文字幕| 在线视频免费一区二区| 日韩毛片在线观看| 欧美区在线播放| 日韩欧美在线视频| 亚洲欧美日韩爽爽影院| 91社区国产高清| 国产一区二区三区高清在线观看| 精品国产一区二区三区久久狼5月| 91在线观看免费高清| 在线精品播放av| 亚洲电影中文字幕| 久久久天堂国产精品女人| 国产精品视频播放| 欧美成人合集magnet| 精品亚洲夜色av98在线观看| 日韩最新免费不卡| 国产精品久久综合av爱欲tv| 久久久女人电视剧免费播放下载| 日本一本a高清免费不卡| 欧美肥老太性生活视频| 九九久久久久99精品| 久久成人18免费网站| 日韩欧美中文字幕在线观看| 91po在线观看91精品国产性色| 亚洲一区美女视频在线观看免费| 欧美日韩亚洲高清| 91精品国产色综合久久不卡98| 国产精品久久二区| 成人欧美一区二区三区黑人| 亚洲美女激情视频| y97精品国产97久久久久久| 日韩色av导航| 欧美日韩中文字幕在线视频| 国产精品九九九| 欧美大片免费观看在线观看网站推荐| 欧美孕妇孕交黑巨大网站| 国内免费精品永久在线视频| 欧美日韩国产丝袜美女| 日韩在线观看免费全| 日韩精品亚洲元码| 亚洲欧美一区二区三区在线| 91精品91久久久久久| 欧美视频在线免费看| 性欧美办公室18xxxxhd| 久久久精品一区二区三区| 亚洲女人被黑人巨大进入al| 国产精品久久久久久久久久新婚| 久久久久久一区二区三区| 亚洲最新av在线网站| 一区二区av在线| 亚洲另类欧美自拍| 国产日韩欧美在线视频观看| 国产精品成人一区二区三区吃奶| 日韩亚洲精品视频| 亚洲男人天堂九九视频| 日韩电视剧在线观看免费网站| 日韩欧美在线视频| 91免费看片网站| 亚洲欧美国内爽妇网| 欧美乱妇40p| 久久亚洲私人国产精品va| 亚洲开心激情网| 国产美女直播视频一区| 亚洲自拍小视频免费观看| 亚洲va电影大全| 狠狠久久五月精品中文字幕| 欧美成人免费全部| 揄拍成人国产精品视频| 欧美亚洲成人网| 国产精品久久久久久久久久久久久久| 国产欧美日韩视频| 欧美另类暴力丝袜| 亚洲激情中文字幕| 久久亚洲精品小早川怜子66| 亚洲欧美激情一区| 国产精品福利在线| 色偷偷888欧美精品久久久| 欧美大码xxxx| 久久九九热免费视频| 国产精品中文字幕久久久| 亚洲最大的av网站| 国产一区二区三区网站| 美日韩在线视频| 久久av资源网站| 91九色综合久久| 亚洲大胆人体视频| 午夜精品久久久久久久久久久久| 久久精品亚洲一区| 成人有码在线播放| 在线观看精品自拍私拍| 91精品国产自产91精品|