摘要:本人郵箱歡迎轉載轉載請注明網址代碼已經全部托管有需要的同學自行下載引言在銀行排隊辦理業務通常會有一個通道讓一些有貴賓卡的優先辦理業務而不需要排隊這就是我們今天要講的優先隊列例子假設在這么一個場景下銀行開始辦理業務之前已經來了個客戶而且銀行認
引言本人郵箱:
歡迎轉載,轉載請注明網址 http://blog.csdn.net/tianshi_kco
github: https://github.com/kco1989/kco
代碼已經全部托管github有需要的同學自行下載
在銀行排隊辦理業務,通常會有一個VIP通道,讓一些有VIP貴賓卡的優先辦理業務,而不需要排隊.這就是我們今天要講的優先隊列.
例子假設在這么一個場景下,銀行開始辦理業務之前,已經來了20個客戶,而且銀行認為誰錢多,誰就優先辦理業務.
首先創建一個Human類,它包括姓名和存款兩個屬性
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()+"]"; } }
之后再增加一個比較Human存款多少的類HumanComparator
public class HumanComparator implements Comparator{ @Override public int compare(Human o1, Human o2) { return o2.getManey() - o1.getManey(); } }
再增加來排隊的類 ProducerRunnable
public class ProducerRunnable implements Runnable{ private static final String name = "明剛紅李劉呂趙黃王孫朱曾游麗吳昊周鄭秦丘"; private Random random = new Random(); private PriorityBlockingQueuequeue; 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 + " 開始排隊..."); } } }
然后再增加辦理業務的類 ConsumerRunnable
public class ConsumerRunnable implements Runnable{ private PriorityBlockingQueuequeue; 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 + " 辦理業務."); } } }
ok,增加測試類
public class TestMain { public static void main(String[] args) throws InterruptedException { PriorityBlockingQueuequeue = 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個來齊了,再開始辦理業務額
運行結果:
小明[存款:9296] 開始排隊... 小剛[存款:765] 開始排隊... 小紅[存款:333] 開始排隊... 小李[存款:3912] 開始排隊... 小劉[存款:5732] 開始排隊... 小呂[存款:3714] 開始排隊... 小趙[存款:8439] 開始排隊... 小黃[存款:7330] 開始排隊... 小王[存款:9535] 開始排隊... 小孫[存款:1421] 開始排隊... 小朱[存款:8308] 開始排隊... 小曾[存款:5211] 開始排隊... 小游[存款:8264] 開始排隊... 小麗[存款:8383] 開始排隊... 小吳[存款:7664] 開始排隊... 小昊[存款:2715] 開始排隊... 小周[存款:9760] 開始排隊... 小鄭[存款:8158] 開始排隊... 小秦[存款:869] 開始排隊... 小丘[存款:1806] 開始排隊... 小周[存款:9760] 辦理業務. 小王[存款:9535] 辦理業務. 小明[存款:9296] 辦理業務. 小趙[存款:8439] 辦理業務. 小麗[存款:8383] 辦理業務. 小朱[存款:8308] 辦理業務. 小游[存款:8264] 辦理業務. 小鄭[存款:8158] 辦理業務. 小吳[存款:7664] 辦理業務. 小黃[存款:7330] 辦理業務. 小劉[存款:5732] 辦理業務. 小曾[存款:5211] 辦理業務. 小李[存款:3912] 辦理業務. 小呂[存款:3714] 辦理業務. 小昊[存款:2715] 辦理業務. 小丘[存款:1806] 辦理業務. 小孫[存款:1421] 辦理業務. 小秦[存款:869] 辦理業務. 小剛[存款:765] 辦理業務. 小紅[存款:333] 辦理業務.
通過結果你會發現,有錢就是老大啊!!!小周跌二個來,結果卻倒數第二個辦理業務,只因為他是窮B.而小周*倒數第四個到,結果卻第一個辦理業務,有錢就是任性啊...
打賞如果覺得我的文章寫的還過得去的話,有錢就捧個錢場,沒錢給我捧個人場(幫我點贊或推薦一下)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/69963.html
摘要:初始狀態對應二叉樹結構將頂點與最后一個結點調換即將頂點與最后一個結點交換,然后將索引為止置。 showImg(https://segmentfault.com/img/bVbgOtL?w=1600&h=800); 本文首發于一世流云專欄:https://segmentfault.com/blog... 一、PriorityBlockingQueue簡介 PriorityBlockin...
摘要:之后,會重復上一步,新喚醒的線程可能取代成為新的線程。這其實是一種名為的多線程設計模式。我們之前說了,線程作用之一就是用來喚醒其它無限等待的線程,所以必須要有這個判斷。線程池框架中的就是一種延時阻塞隊列。 showImg(https://segmentfault.com/img/bVbgVHV?w=1600&h=1067); 本文首發于一世流云專欄:https://segmentfau...
摘要:整個包,按照功能可以大致劃分如下鎖框架原子類框架同步器框架集合框架執行器框架本系列將按上述順序分析,分析所基于的源碼為。后,根據一系列常見的多線程設計模式,設計了并發包,其中包下提供了一系列基礎的鎖工具,用以對等進行補充增強。 showImg(https://segmentfault.com/img/remote/1460000016012623); 本文首發于一世流云專欄:https...
摘要:架構師入門筆記三初識隊列和模擬基礎知識線程通信概念線程是操作系統中獨立的個體,但這些個體如果不經過特殊的處理,就不能成為一個整體,線程之間的通信就成為整體的必用方法之一。它是一個基于鏈接節點的無界限線程安全隊列。 架構師入門筆記三 初識Queue隊列 wait和notify模擬Queue wait/notify 基礎知識 線程通信概念:線程是操作系統中獨立的個體,但這些個體如果不經過特...
閱讀 1387·2021-10-14 09:43
閱讀 4235·2021-09-27 13:57
閱讀 4566·2021-09-22 15:54
閱讀 2560·2021-09-22 10:54
閱讀 2376·2021-09-22 10:02
閱讀 2117·2021-08-27 13:11
閱讀 876·2019-08-29 18:44
閱讀 1648·2019-08-29 15:20