日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

小米面試:如何實(shí)現(xiàn)優(yōu)先級(jí)線程池?

來源: 責(zé)編: 時(shí)間:2024-05-20 17:53:42 215觀看
導(dǎo)讀我們知道,線程池中的所有線程都是由統(tǒng)一的線程工廠來創(chuàng)建的,當(dāng)我們指定線程工廠時(shí),線程池中的所有線程會(huì)使用我們指定的線程工廠來創(chuàng)建線程;但如果沒有指定線程工廠,則會(huì)使用默認(rèn)的線程工廠 DefaultThreadFactory 來創(chuàng)建線

xnv28資訊網(wǎng)——每日最新資訊28at.com

我們知道,線程池中的所有線程都是由統(tǒng)一的線程工廠來創(chuàng)建的,當(dāng)我們指定線程工廠時(shí),線程池中的所有線程會(huì)使用我們指定的線程工廠來創(chuàng)建線程;但如果沒有指定線程工廠,則會(huì)使用默認(rèn)的線程工廠 DefaultThreadFactory 來創(chuàng)建線程,核心源碼如下:xnv28資訊網(wǎng)——每日最新資訊28at.com

DefaultThreadFactory() {    @SuppressWarnings("removal")    SecurityManager s = System.getSecurityManager();    group = (s != null) ? s.getThreadGroup() :                          Thread.currentThread().getThreadGroup();    namePrefix = "pool-" +                  poolNumber.getAndIncrement() +                 "-thread-";}

那么問題來了,面試官問的是“如何實(shí)現(xiàn)優(yōu)先級(jí)線程池?”,為什么我們一上來先講了線程工廠呢?xnv28資訊網(wǎng)——每日最新資訊28at.com

這是因?yàn)椋?dāng)我們講到線程池優(yōu)先級(jí)的時(shí)候,我們首先會(huì)想到線程的優(yōu)先級(jí),所以按照慣性思考,當(dāng)面試官問到如何使用實(shí)現(xiàn)優(yōu)先級(jí)線程池時(shí),我們首先會(huì)考慮是不是在創(chuàng)建線程池的時(shí)候,可以通過某種方法來創(chuàng)建不同的線程優(yōu)先級(jí),從而實(shí)現(xiàn)優(yōu)先級(jí)線程池?這就是開頭我們一上來就講線程工廠的原因。xnv28資訊網(wǎng)——每日最新資訊28at.com

那在線程工廠中如何設(shè)置線程的優(yōu)先級(jí)呢?xnv28資訊網(wǎng)——每日最新資訊28at.com

它的設(shè)置也比較簡(jiǎn)單,如下代碼所示:xnv28資訊網(wǎng)——每日最新資訊28at.com

import java.util.concurrent.ThreadFactory;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;public class CustomThreadPoolExecutorDemo {    public static void main(String[] args) {        // 自定義線程工廠        ThreadFactory threadFactory = new CustomThreadFactory();        // 創(chuàng)建線程池        ThreadPoolExecutor executor = new ThreadPoolExecutor(2, 2, 0,                                                              TimeUnit.MILLISECONDS,                                                              new LinkedBlockingQueue<>(),                                                              threadFactory);        // 提交任務(wù)        executor.execute(() -> System.out.println("Task 1"));        executor.execute(() -> System.out.println("Task 2"));        // 關(guān)閉線程池        executor.shutdown();    }    static class CustomThreadFactory implements ThreadFactory {        @Override        public Thread newThread(Runnable r) {            Thread thread = new Thread(r);            // 設(shè)置線程優(yōu)先級(jí)為最低優(yōu)先級(jí)            thread.setPriority(Thread.MIN_PRIORITY);             return thread;        }    }}

但是這種方式也有問題,那就是線程工廠是統(tǒng)一的,所以即使能在線程工廠中設(shè)置線程的優(yōu)先級(jí),那么也是將整個(gè)線程池中的所有線程都設(shè)置成統(tǒng)一的優(yōu)先級(jí)了,而不能解決咱們本文提出的問題的,那如何才能實(shí)現(xiàn)優(yōu)先級(jí)線程池呢?xnv28資訊網(wǎng)——每日最新資訊28at.com

1.優(yōu)先級(jí)線程池實(shí)現(xiàn)思路

轉(zhuǎn)念一想,既然不能在線程優(yōu)先級(jí)上下功夫,但我們是否可以在線程池的任務(wù)隊(duì)列上動(dòng)點(diǎn)心思呢?xnv28資訊網(wǎng)——每日最新資訊28at.com

此時(shí)我們想到,可以使用 PriorityBlockingQueue 優(yōu)先級(jí)隊(duì)列來對(duì)任務(wù)進(jìn)行排序啊(PriorityBlockingQueue 天生支持按照優(yōu)先級(jí)自動(dòng)排序任務(wù)的),這樣不就能保證優(yōu)先級(jí)高的任務(wù)會(huì)被線程池優(yōu)先獲取并執(zhí)行了嘛!xnv28資訊網(wǎng)——每日最新資訊28at.com

所以,有時(shí)候一條路走不通的時(shí)候,我們可以嘗試換一個(gè)思路再試試。xnv28資訊網(wǎng)——每日最新資訊28at.com

2.優(yōu)先級(jí)隊(duì)列使用

我們先來測(cè)試一下 PriorityBlockingQueue 的使用,以嘗試其可行性,示例代碼如下:xnv28資訊網(wǎng)——每日最新資訊28at.com

import java.util.concurrent.PriorityBlockingQueue;public class PriorityBlockingQueueExample {    public static void main(String[] args) {        PriorityBlockingQueue<Task> priorityQueue = new PriorityBlockingQueue<>();        // 添加任務(wù)到優(yōu)先級(jí)隊(duì)列        priorityQueue.add(new Task("Task 1", 1));        priorityQueue.add(new Task("Task 4", 4));        priorityQueue.add(new Task("Task 3", 3));        priorityQueue.add(new Task("Task 2", 2));        // 從優(yōu)先級(jí)隊(duì)列中取出任務(wù)并執(zhí)行        while (!priorityQueue.isEmpty()) {            Task task = priorityQueue.poll();            if (task != null) {                task.execute();            }        }    }    static class Task implements Comparable<Task> {        private String name;        private int priority;        public Task(String name, int priority) {            this.name = name;            this.priority = priority;        }        public void execute() {            System.out.println("Executing task: " + name);        }        @Override        public int compareTo(Task o) {            return Integer.compare(this.priority, o.priority);        }    }}

以上程序的執(zhí)行結(jié)果如下:xnv28資訊網(wǎng)——每日最新資訊28at.com

xnv28資訊網(wǎng)——每日最新資訊28at.com

從上述結(jié)果和代碼可以看出,我們添加任務(wù)的順序是:1、4、3、2,但最終會(huì)按照優(yōu)先級(jí)排隊(duì)執(zhí)行的順序是:1、2、3、4,執(zhí)行結(jié)果符合我們的預(yù)期,優(yōu)先級(jí)高的任務(wù)先被執(zhí)行了(數(shù)字越小,優(yōu)先級(jí)越高)。xnv28資訊網(wǎng)——每日最新資訊28at.com

3.優(yōu)先級(jí)線程池

因此,我們實(shí)現(xiàn)的優(yōu)先級(jí)線程池的最終代碼如下:xnv28資訊網(wǎng)——每日最新資訊28at.com

import java.util.concurrent.BlockingQueue;import java.util.concurrent.PriorityBlockingQueue;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;public class PriorityThreadPool {    public static void main(String[] args) {        BlockingQueue<Runnable> queue = new PriorityBlockingQueue<>(1000);        ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 1,                0, TimeUnit.SECONDS, queue        );        for (int i = 0; i < 100; i++) {            int finalI = i;            executor.execute(new PriorityTask(i, () -> {                try {                    Thread.sleep(1000);                } catch (InterruptedException e) {                    throw new RuntimeException(e);                }                System.out.println("優(yōu)先級(jí):" + finalI);            }));        }    }    static class PriorityTask implements Runnable, Comparable<PriorityTask> {        private final int priority;        private final Runnable task;        public PriorityTask(int priority, Runnable task) {            this.priority = priority;            this.task = task;        }        @Override        public void run() {            task.run();        }        @Override        public int compareTo(PriorityTask other) {            // 優(yōu)先級(jí)高的任務(wù)應(yīng)該排在前面(數(shù)字越小優(yōu)先級(jí)越大)            return Integer.compare(this.priority, other.priority);        }    }}

以上程序執(zhí)行結(jié)果如下:xnv28資訊網(wǎng)——每日最新資訊28at.com

xnv28資訊網(wǎng)——每日最新資訊28at.com

從上述結(jié)果可以看出,線程池是完全按照優(yōu)先級(jí)從高到低的順序執(zhí)行的(數(shù)字越小優(yōu)先級(jí)越高),如果將 compareTo 中的排序方法倒置之后,那么線程池的執(zhí)行順序就完全相反了,可見使用 PriorityBlockingQueue 實(shí)現(xiàn)優(yōu)先級(jí)線程池的效果非常顯著。xnv28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-89400-0.html小米面試:如何實(shí)現(xiàn)優(yōu)先級(jí)線程池?

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: Rust Tokio取消任務(wù)的幾種模式,你知道嗎?

下一篇: Python 高效編程的 15 個(gè)優(yōu)秀實(shí)踐

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
日韩一区二区高清| 久久久久久久激情视频| 国产精品久久久久久影院8一贰佰| 久久尤物视频| 欧美国产一区二区| 欧美日韩一区二区免费在线观看| 国产精品毛片a∨一区二区三区| 国产深夜精品福利| 亚洲国产高清aⅴ视频| 日韩午夜在线视频| 亚洲欧美日韩在线观看a三区| 久久天堂成人| 欧美四级在线观看| 韩国女主播一区| 99亚洲伊人久久精品影院红桃| 午夜精品成人在线视频| 久久综合网络一区二区| 欧美日韩在线影院| 国内久久视频| 一本色道久久综合亚洲精品不 | 国产伦精品一区二区三区| 国产最新精品精品你懂的| 亚洲精品一区二区三区蜜桃久| 亚洲一区精品电影| 模特精品裸拍一区| 国产日韩欧美日韩大片| 亚洲免费成人| 久久精品人人做人人综合| 欧美啪啪一区| 狠狠88综合久久久久综合网| 中日韩在线视频| 久久综合99re88久久爱| 国产精品久久久久久久久久ktv| 一区二区三区在线视频播放| 亚洲午夜激情| 欧美电影专区| 国产一区香蕉久久| 亚洲无玛一区| 欧美大片在线看免费观看| 国产精品每日更新| 亚洲毛片在线免费观看| 久久女同互慰一区二区三区| 国产精品v片在线观看不卡| 亚洲国产精品ⅴa在线观看 | 亚洲精品乱码久久久久久日本蜜臀| 亚洲欧美综合网| 欧美精品日日鲁夜夜添| 在线播放不卡| 午夜亚洲福利| 国产精品久久| 日韩亚洲欧美成人一区| 免费看的黄色欧美网站| 国外成人在线视频| 欧美一级视频精品观看| 国产精品国色综合久久| 日韩一级在线| 欧美黄色一级视频| 亚洲国产精品日韩| 裸体丰满少妇做受久久99精品 | 亚洲大片在线观看| 久久精彩视频| 国产欧美一区二区三区久久人妖| 中文精品视频| 欧美视频中文字幕在线| 日韩亚洲综合在线| 欧美精品午夜视频| 亚洲精品一区二区三区婷婷月| 久久夜色精品国产亚洲aⅴ| 国产亚洲福利一区| 欧美亚洲视频在线观看| 国产精品日韩久久久久| 亚洲性夜色噜噜噜7777| 欧美日韩中文在线| 一区二区三区欧美日韩| 欧美日韩亚洲国产一区| 在线亚洲欧美视频| 欧美午夜精品久久久久久久 | 亚洲视频精选在线| 欧美三级视频在线播放| 99re热这里只有精品免费视频| 欧美黄色一区| 99国产欧美久久久精品| 欧美日韩国产bt| 一区二区三区免费网站| 欧美日韩在线一区二区三区| 亚洲图片欧美一区| 国产精品欧美一区二区三区奶水| 亚洲欧美日韩专区| 国产日韩欧美一区二区三区在线观看 | 久久午夜电影| 精品1区2区3区4区| 久久综合中文字幕| 亚洲黄色免费网站| 欧美日韩不卡视频| 在线视频一区观看| 国产精品免费一区二区三区在线观看| 亚洲免费在线视频| 国产一区二区欧美| 免费精品视频| 99精品黄色片免费大全| 国产精品久久国产三级国电话系列 | 欧美视频在线播放| 亚洲欧美精品suv| 国产一区二区观看| 欧美成人激情视频| 亚洲神马久久| 国产日韩欧美一区| 蜜臀久久99精品久久久画质超高清| 亚洲精品国精品久久99热| 欧美日韩国产在线看| 亚洲欧美国产77777| 国内精品模特av私拍在线观看 | 国内精品写真在线观看| 欧美成人精品1314www| 一本色道久久综合精品竹菊| 国产精品毛片a∨一区二区三区| 欧美主播一区二区三区美女 久久精品人| 国语自产偷拍精品视频偷| 欧美国产日韩一二三区| 亚洲一区二区三区中文字幕在线| 国产香蕉久久精品综合网| 久久综合色影院| 在线综合+亚洲+欧美中文字幕| 国产精品一区二区三区四区| 久久久久久久网站| 亚洲老司机av| 国产一区91精品张津瑜| 欧美成人资源网| 亚洲欧美亚洲| 国内精品嫩模av私拍在线观看| 久久久蜜桃精品 | 久久免费偷拍视频| 在线综合亚洲欧美在线视频| 国模套图日韩精品一区二区| 欧美精品1区2区| 羞羞答答国产精品www一本| 亚洲高清视频中文字幕| 国产精品成人免费精品自在线观看| 久久久久国产一区二区| 中文日韩在线| 在线观看日韩专区| 国产精品久久久久久久一区探花| 久久午夜电影| 亚洲一区二区在线观看视频| 国内精品久久久久影院薰衣草| 欧美日韩国产一区| 久久久亚洲成人| 亚洲视频在线一区| 1000精品久久久久久久久| 国产精品美女xx| 欧美电影美腿模特1979在线看| 午夜精品理论片| 日韩视频永久免费| 在线不卡欧美| 国产欧美日韩亚洲| 欧美日韩在线视频观看| 美女诱惑一区| 久久av一区二区三区漫画| 99在线精品视频在线观看| 一色屋精品亚洲香蕉网站| 国产精品一区二区欧美| 欧美日韩国产亚洲一区| 久久精品国产v日韩v亚洲| 亚洲一区二区3| 亚洲精品视频二区| 影音先锋国产精品| 国产午夜一区二区三区| 国产精品麻豆成人av电影艾秋| 欧美精品日韩三级| 免费在线日韩av| 久久久高清一区二区三区| 亚洲欧美日韩第一区| 99精品国产高清一区二区| 亚洲国产成人精品久久久国产成人一区| 国产目拍亚洲精品99久久精品| 欧美三日本三级少妇三2023| 欧美韩日精品| 蜜臀a∨国产成人精品| 久久久噜噜噜久久中文字幕色伊伊| 亚洲欧美在线另类| 亚洲尤物在线视频观看| 99视频在线精品国自产拍免费观看| 亚洲国产精品一区在线观看不卡| 国产综合在线视频| 国产一区二区剧情av在线| 国产精品久久激情| 欧美日韩一卡| 欧美揉bbbbb揉bbbbb| 欧美国产日韩免费| 欧美高清视频一区二区| 免费观看成人www动漫视频| 久久精品一区二区国产| 欧美中文字幕第一页| 欧美一区在线直播| 亚洲男人影院| 91久久久久久久久久久久久| 亚洲国产成人久久综合一区| 精品成人一区二区三区| 国产最新精品精品你懂的| 国产女主播在线一区二区| 国产乱码精品1区2区3区| 国产精品一区二区三区四区五区| 国产精品日日摸夜夜添夜夜av| 国产精品久久久久久久久借妻|