成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

(十六)java多線程之優(yōu)先隊(duì)列PriorityBlockingQueue

helloworldcoding / 449人閱讀

摘要:本人郵箱歡迎轉(zhuǎn)載轉(zhuǎn)載請(qǐng)注明網(wǎng)址代碼已經(jīng)全部托管有需要的同學(xué)自行下載引言在銀行排隊(duì)辦理業(yè)務(wù)通常會(huì)有一個(gè)通道讓一些有貴賓卡的優(yōu)先辦理業(yè)務(wù)而不需要排隊(duì)這就是我們今天要講的優(yōu)先隊(duì)列例子假設(shè)在這么一個(gè)場(chǎng)景下銀行開(kāi)始辦理業(yè)務(wù)之前已經(jīng)來(lái)了個(gè)客戶而且銀行認(rèn)

本人郵箱:
歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明網(wǎng)址 http://blog.csdn.net/tianshi_kco
github: https://github.com/kco1989/kco
代碼已經(jīng)全部托管github有需要的同學(xué)自行下載

引言

在銀行排隊(duì)辦理業(yè)務(wù),通常會(huì)有一個(gè)VIP通道,讓一些有VIP貴賓卡的優(yōu)先辦理業(yè)務(wù),而不需要排隊(duì).這就是我們今天要講的優(yōu)先隊(duì)列.

例子

假設(shè)在這么一個(gè)場(chǎng)景下,銀行開(kāi)始辦理業(yè)務(wù)之前,已經(jīng)來(lái)了20個(gè)客戶,而且銀行認(rèn)為誰(shuí)錢多,誰(shuí)就優(yōu)先辦理業(yè)務(wù).

首先創(chuàng)建一個(gè)Human類,它包括姓名存款兩個(gè)屬性

public class Human {

    private int maney;
    private String name;
    public Human(int maney, String name){
        this.maney = maney;
        this.name = name;
    }

    public int getManey() {
        return maney;
    }

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return getName() + "[存款:"+getManey()+"]";
    }
}

之后再增加一個(gè)比較Human存款多少的類HumanComparator

public class HumanComparator implements Comparator  {
    @Override
    public int compare(Human o1, Human o2) {
        return o2.getManey() - o1.getManey();
    }
}

再增加來(lái)排隊(duì)的類 ProducerRunnable

public class ProducerRunnable implements Runnable{
    private static final String name = "明剛紅李劉呂趙黃王孫朱曾游麗吳昊周鄭秦丘";
    private Random random = new Random();
    private PriorityBlockingQueue queue;
    public ProducerRunnable(PriorityBlockingQueue queue) {
        this.queue = queue;
    }

    @Override
    public void run() {
        for(int i = 0; i < 20; i ++){
            Human human = new Human(random.nextInt(10000), "小" + name.charAt(i));
            queue.put(human);
            System.out.println(human + " 開(kāi)始排隊(duì)...");
        }
    }

}

然后再增加辦理業(yè)務(wù)的類 ConsumerRunnable

public class ConsumerRunnable implements Runnable{

    private PriorityBlockingQueue queue;
    public ConsumerRunnable(PriorityBlockingQueue queue) {
        this.queue = queue;
    }

    @Override
    public void run() {
        while (true){
            Human take = queue.poll();
            if (take == null){
                break;
            }
            System.out.println(take + " 辦理業(yè)務(wù).");
        }
    }
}

ok,增加測(cè)試類

public class TestMain {

    public static void main(String[] args) throws InterruptedException {

        PriorityBlockingQueue queue = new PriorityBlockingQueue<>(200, new HumanComparator());
        Thread thread = new Thread(new ProducerRunnable(queue));
        thread.start();
        thread.join();
        new Thread(new ConsumerRunnable(queue)).start();
    }
}

"thread.join();":先等20個(gè)來(lái)齊了,再開(kāi)始辦理業(yè)務(wù)額

運(yùn)行結(jié)果:

小明[存款:9296] 開(kāi)始排隊(duì)...
小剛[存款:765] 開(kāi)始排隊(duì)...
小紅[存款:333] 開(kāi)始排隊(duì)...
小李[存款:3912] 開(kāi)始排隊(duì)...
小劉[存款:5732] 開(kāi)始排隊(duì)...
小呂[存款:3714] 開(kāi)始排隊(duì)...
小趙[存款:8439] 開(kāi)始排隊(duì)...
小黃[存款:7330] 開(kāi)始排隊(duì)...
小王[存款:9535] 開(kāi)始排隊(duì)...
小孫[存款:1421] 開(kāi)始排隊(duì)...
小朱[存款:8308] 開(kāi)始排隊(duì)...
小曾[存款:5211] 開(kāi)始排隊(duì)...
小游[存款:8264] 開(kāi)始排隊(duì)...
小麗[存款:8383] 開(kāi)始排隊(duì)...
小吳[存款:7664] 開(kāi)始排隊(duì)...
小昊[存款:2715] 開(kāi)始排隊(duì)...
小周[存款:9760] 開(kāi)始排隊(duì)...
小鄭[存款:8158] 開(kāi)始排隊(duì)...
小秦[存款:869] 開(kāi)始排隊(duì)...
小丘[存款:1806] 開(kāi)始排隊(duì)...
小周[存款:9760] 辦理業(yè)務(wù).
小王[存款:9535] 辦理業(yè)務(wù).
小明[存款:9296] 辦理業(yè)務(wù).
小趙[存款:8439] 辦理業(yè)務(wù).
小麗[存款:8383] 辦理業(yè)務(wù).
小朱[存款:8308] 辦理業(yè)務(wù).
小游[存款:8264] 辦理業(yè)務(wù).
小鄭[存款:8158] 辦理業(yè)務(wù).
小吳[存款:7664] 辦理業(yè)務(wù).
小黃[存款:7330] 辦理業(yè)務(wù).
小劉[存款:5732] 辦理業(yè)務(wù).
小曾[存款:5211] 辦理業(yè)務(wù).
小李[存款:3912] 辦理業(yè)務(wù).
小呂[存款:3714] 辦理業(yè)務(wù).
小昊[存款:2715] 辦理業(yè)務(wù).
小丘[存款:1806] 辦理業(yè)務(wù).
小孫[存款:1421] 辦理業(yè)務(wù).
小秦[存款:869] 辦理業(yè)務(wù).
小剛[存款:765] 辦理業(yè)務(wù).
小紅[存款:333] 辦理業(yè)務(wù).

通過(guò)結(jié)果你會(huì)發(fā)現(xiàn),有錢就是老大啊!!!小周跌二個(gè)來(lái),結(jié)果卻倒數(shù)第二個(gè)辦理業(yè)務(wù),只因?yàn)樗歉FB.而小周*倒數(shù)第四個(gè)到,結(jié)果卻第一個(gè)辦理業(yè)務(wù),有錢就是任性啊...

打賞

如果覺(jué)得我的文章寫的還過(guò)得去的話,有錢就捧個(gè)錢場(chǎng),沒(méi)錢給我捧個(gè)人場(chǎng)(幫我點(diǎn)贊或推薦一下)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/69963.html

相關(guān)文章

  • Java線程進(jìn)階(三四)—— J.U.Ccollections框架:PriorityBlocki

    摘要:初始狀態(tài)對(duì)應(yīng)二叉樹(shù)結(jié)構(gòu)將頂點(diǎn)與最后一個(gè)結(jié)點(diǎn)調(diào)換即將頂點(diǎn)與最后一個(gè)結(jié)點(diǎn)交換,然后將索引為止置。 showImg(https://segmentfault.com/img/bVbgOtL?w=1600&h=800); 本文首發(fā)于一世流云專欄:https://segmentfault.com/blog... 一、PriorityBlockingQueue簡(jiǎn)介 PriorityBlockin...

    levius 評(píng)論0 收藏0
  • Java線程進(jìn)階(三六)—— J.U.Ccollections框架:DelayQueue

    摘要:之后,會(huì)重復(fù)上一步,新喚醒的線程可能取代成為新的線程。這其實(shí)是一種名為的多線程設(shè)計(jì)模式。我們之前說(shuō)了,線程作用之一就是用來(lái)喚醒其它無(wú)限等待的線程,所以必須要有這個(gè)判斷。線程池框架中的就是一種延時(shí)阻塞隊(duì)列。 showImg(https://segmentfault.com/img/bVbgVHV?w=1600&h=1067); 本文首發(fā)于一世流云專欄:https://segmentfau...

    enda 評(píng)論0 收藏0
  • Java線程進(jìn)階(一)—— J.U.C并發(fā)包概述

    摘要:整個(gè)包,按照功能可以大致劃分如下鎖框架原子類框架同步器框架集合框架執(zhí)行器框架本系列將按上述順序分析,分析所基于的源碼為。后,根據(jù)一系列常見(jiàn)的多線程設(shè)計(jì)模式,設(shè)計(jì)了并發(fā)包,其中包下提供了一系列基礎(chǔ)的鎖工具,用以對(duì)等進(jìn)行補(bǔ)充增強(qiáng)。 showImg(https://segmentfault.com/img/remote/1460000016012623); 本文首發(fā)于一世流云專欄:https...

    anonymoussf 評(píng)論0 收藏0
  • java 隊(duì)列

    摘要:是基于鏈接節(jié)點(diǎn)的線程安全的隊(duì)列。通過(guò)這些高效并且線程安全的隊(duì)列類,為我們快速搭建高質(zhì)量的多線程程序帶來(lái)極大的便利。隊(duì)列內(nèi)部?jī)H允許容納一個(gè)元素。該隊(duì)列的頭部是延遲期滿后保存時(shí)間最長(zhǎng)的元素。 隊(duì)列簡(jiǎn)述 Queue: 基本上,一個(gè)隊(duì)列就是一個(gè)先入先出(FIFO)的數(shù)據(jù)結(jié)構(gòu)Queue接口與List、Set同一級(jí)別,都是繼承了Collection接口。LinkedList實(shí)現(xiàn)了Deque接 口。...

    goji 評(píng)論0 收藏0
  • 初識(shí)Queue隊(duì)列

    摘要:架構(gòu)師入門筆記三初識(shí)隊(duì)列和模擬基礎(chǔ)知識(shí)線程通信概念線程是操作系統(tǒng)中獨(dú)立的個(gè)體,但這些個(gè)體如果不經(jīng)過(guò)特殊的處理,就不能成為一個(gè)整體,線程之間的通信就成為整體的必用方法之一。它是一個(gè)基于鏈接節(jié)點(diǎn)的無(wú)界限線程安全隊(duì)列。 架構(gòu)師入門筆記三 初識(shí)Queue隊(duì)列 wait和notify模擬Queue wait/notify 基礎(chǔ)知識(shí) 線程通信概念:線程是操作系統(tǒng)中獨(dú)立的個(gè)體,但這些個(gè)體如果不經(jīng)過(guò)特...

    Miracle_lihb 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<