精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

從零手寫Java線程池到性能優(yōu)化

開發(fā) 前端
線程池的核心原理其實并不復雜,只要我們耐心的分析,深入其源碼理解線程池的核心本質,你就會發(fā)現線程池的設計原來是如此的優(yōu)雅。希望通過這個手寫線程池的小例子,能夠讓你更好的理解線程池的核心原理。

那今天,我們就一起花10分鐘手擼一個極簡版的Java線程池,讓小伙伴們更好的理解線程池的核心原理。

本文的整體結構如下所示。

Java線程池核心原理

看過Java線程池源碼的小伙伴都知道,在Java線程池中最核心的類就是ThreadPoolExecutor,而在ThreadPoolExecutor類中最核心的構造方法就是帶有7個參數的構造方法,如下所示。

public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue,
                              ThreadFactory threadFactory,
                              RejectedExecutionHandler handler)

各參數的含義如下所示。

  • corePoolSize:線程池中的常駐核心線程數。
  • maximumPoolSize:線程池能夠容納同時執(zhí)行的最大線程數,此值大于等于1。
  • keepAliveTime:多余的空閑線程存活時間,當空間時間達到keepAliveTime值時,多余的線程會被銷毀直到只剩下corePoolSize個線程為止。
  • unit:keepAliveTime的單位。
  • workQueue:任務隊列,被提交但尚未被執(zhí)行的任務。
  • threadFactory:表示生成線程池中工作線程的線程工廠,用戶創(chuàng)建新線程,一般用默認即可。
  • handler:拒絕策略,表示當線程隊列滿了并且工作線程大于等于線程池的最大顯示數(maxnumPoolSize)時,如何來拒絕請求執(zhí)行的runnable的策略。

并且Java的線程池是通過 生產者-消費者模式 實現的,線程池的使用方是生產者,而線程池本身就是消費者。

Java線程池的核心工作流程如下圖所示。

手擼Java線程池

我們自己手動實現的線程池要比Java自身的線程池簡單的多,我們去掉了各種復雜的處理方式,只保留了最核心的原理:線程池的使用者向任務隊列中添加任務,而線程池本身從任務隊列中消費任務并執(zhí)行任務。

只要理解了這個核心原理,接下來的代碼就簡單多了。在實現這個簡單的線程池時,我們可以將整個實現過程進行拆解。拆解后的實現流程為:定義核心字段、創(chuàng)建內部類WorkThread、創(chuàng)建ThreadPool類的構造方法和創(chuàng)建執(zhí)行任務的方法。

定義核心字段

首先,我們創(chuàng)建一個名稱為ThreadPool的Java類,并在這個類中定義如下核心字段。

  • DEFAULT_WORKQUEUE_SIZE:靜態(tài)常量,表示默認的阻塞隊列大小。
  • workQueue:模擬實際的線程池使用阻塞隊列來實現生產者-消費者模式。
  • workThreads:模擬實際的線程池使用List集合保存線程池內部的工作線程。

核心代碼如下所示。

//默認阻塞隊列大小
private static final int DEFAULT_WORKQUEUE_SIZE = 5;

//模擬實際的線程池使用阻塞隊列來實現生產者-消費者模式
private BlockingQueue<Runnable> workQueue;

//模擬實際的線程池使用List集合保存線程池內部的工作線程
private List<WorkThread> workThreads = new ArrayList<WorkThread>();

創(chuàng)建內部類WordThread

在ThreadPool類中創(chuàng)建一個內部類WorkThread,模擬線程池中的工作線程。主要的作用就是消費workQueue中的任務,并執(zhí)行任務。由于工作線程需要不斷從workQueue中獲取任務,所以,這里使用了while(true)循環(huán)不斷嘗試消費隊列中的任務。

核心代碼如下所示。

//內部類WorkThread,模擬線程池中的工作線程
//主要的作用就是消費workQueue中的任務,并執(zhí)行
//由于工作線程需要不斷從workQueue中獲取任務,使用了while(true)循環(huán)不斷嘗試消費隊列中的任務
class WorkThread extends Thread{
    @Override
    public void run() {
        //不斷循環(huán)獲取隊列中的任務
        while (true){
            //當沒有任務時,會阻塞
            try {
                Runnable workTask = workQueue.take();
                workTask.run();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

創(chuàng)建ThreadPool類的構造方法

這里,我們?yōu)門hreadPool類創(chuàng)建兩個構造方法,一個構造方法中傳入線程池的容量大小和阻塞隊列,另一個構造方法中只傳入線程池的容量大小。

核心代碼如下所示。

//在ThreadPool的構造方法中傳入線程池的大小和阻塞隊列
public ThreadPool(int poolSize, BlockingQueue<Runnable> workQueue){
    this.workQueue = workQueue;
    //創(chuàng)建poolSize個工作線程并將其加入到workThreads集合中
    IntStream.range(0, poolSize).forEach((i) -> {
        WorkThread workThread = new WorkThread();
        workThread.start();
        workThreads.add(workThread);
    });
}

//在ThreadPool的構造方法中傳入線程池的大小
public ThreadPool(int poolSize){
    this(poolSize, new LinkedBlockingQueue<>(DEFAULT_WORKQUEUE_SIZE));
}

創(chuàng)建執(zhí)行任務的方法

在ThreadPool類中創(chuàng)建執(zhí)行任務的方法execute(),execute()方法的實現比較簡單,就是將方法接收到的Runnable任務加入到workQueue隊列中。

核心代碼如下所示。

//通過線程池執(zhí)行任務
public void execute(Runnable task){
    try {
        workQueue.put(task);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

完整源碼

這里,我們給出手動實現的ThreadPool線程池的完整源代碼,如下所示。

package io.binghe.thread.pool;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.stream.IntStream;

/**
 * @author binghe
 * @version 1.0.0
 * @description 自定義線程池
 */
publicclass ThreadPool {

    //默認阻塞隊列大小
    privatestaticfinalint DEFAULT_WORKQUEUE_SIZE = 5;

    //模擬實際的線程池使用阻塞隊列來實現生產者-消費者模式
    private BlockingQueue<Runnable> workQueue;

    //模擬實際的線程池使用List集合保存線程池內部的工作線程
    private List<WorkThread> workThreads = new ArrayList<WorkThread>();

    //在ThreadPool的構造方法中傳入線程池的大小和阻塞隊列
    public ThreadPool(int poolSize, BlockingQueue<Runnable> workQueue){
        this.workQueue = workQueue;
        //創(chuàng)建poolSize個工作線程并將其加入到workThreads集合中
        IntStream.range(0, poolSize).forEach((i) -> {
            WorkThread workThread = new WorkThread();
            workThread.start();
            workThreads.add(workThread);
        });
    }

    //在ThreadPool的構造方法中傳入線程池的大小
    public ThreadPool(int poolSize){
        this(poolSize, new LinkedBlockingQueue<>(DEFAULT_WORKQUEUE_SIZE));
    }

//通過線程池執(zhí)行任務
    public void execute(Runnable task){
        try {
            workQueue.put(task);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    //內部類WorkThread,模擬線程池中的工作線程
    //主要的作用就是消費workQueue中的任務,并執(zhí)行
    //由于工作線程需要不斷從workQueue中獲取任務,使用了while(true)循環(huán)不斷嘗試消費隊列中的任務
    class WorkThread extends Thread{
        @Override
        public void run() {
            //不斷循環(huán)獲取隊列中的任務
            while (true){
                //當沒有任務時,會阻塞
                try {
                    Runnable workTask = workQueue.take();
                    workTask.run();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

沒錯,我們僅僅用了幾十行Java代碼就實現了一個極簡版的Java線程池,沒錯,這個極簡版的Java線程池的代碼卻體現了Java線程池的核心原理。

接下來,我們測試下這個極簡版的Java線程池。

編寫測試程序

測試程序也比較簡單,就是通過在main()方法中調用ThreadPool類的構造方法,傳入線程池的大小,創(chuàng)建一個ThreadPool類的實例,然后循環(huán)10次調用ThreadPool類的execute()方法,向線程池中提交的任務為:打印當前線程的名稱--->> Hello ThreadPool

整體測試代碼如下所示。

package io.binghe.thread.pool.test;

import io.binghe.thread.pool.ThreadPool;

import java.util.stream.IntStream;

/**
 * @author binghe
 * @version 1.0.0
 * @description 測試自定義線程池
 */
publicclass ThreadPoolTest {

    public static void main(String[] args){
        ThreadPool threadPool = new ThreadPool(10);
        IntStream.range(0, 10).forEach((i) -> {
            threadPool.execute(() -> {
                System.out.println(Thread.currentThread().getName() + "--->> Hello ThreadPool");
            });
        });
    }
}

接下來,運行ThreadPoolTest類的main()方法,會輸出如下信息。

Thread-0--->> Hello ThreadPool
Thread-9--->> Hello ThreadPool
Thread-5--->> Hello ThreadPool
Thread-8--->> Hello ThreadPool
Thread-4--->> Hello ThreadPool
Thread-1--->> Hello ThreadPool
Thread-2--->> Hello ThreadPool
Thread-5--->> Hello ThreadPool
Thread-9--->> Hello ThreadPool
Thread-0--->> Hello ThreadPool

至此,我們自定義的Java線程池就開發(fā)完成了。

總結

線程池的核心原理其實并不復雜,只要我們耐心的分析,深入其源碼理解線程池的核心本質,你就會發(fā)現線程池的設計原來是如此的優(yōu)雅。希望通過這個手寫線程池的小例子,能夠讓你更好的理解線程池的核心原理。

注意:本章,我們實現的手寫線程池是極簡版的線程池,在《深入理解高并發(fā)編程:JDK核心技術》一書中,我們實現了手寫升級版的線程池,涵蓋:核心線程數、最大線程數、任務隊列、線程空閑超時時間、拒絕策略等。大家可以到拉取如下代碼到本地進行查看。

  • GitHub:https://github.com/binghe001/mykit-concurrent-jdk。
  • Gitee:https://gitee.com/binghe001/mykit-concurrent-jdk。
  • GitCode:https://gitcode.net/binghe001/mykit-concurrent-jdk

拉取代碼后,mykit-concurrent-threadpool工程下的代碼便是手寫的升級版線程池,大家在理解JDK線程池執(zhí)行任務的流程基礎上,自行查看即可,這里不再贅述。

責任編輯:姜華 來源: 冰河技術
相關推薦

2023-10-16 22:03:36

日志包多線程日志包

2023-08-01 09:00:00

高并發(fā)性能優(yōu)化

2020-12-10 08:24:40

線程池線程方法

2022-05-31 10:51:12

架構技術優(yōu)化

2022-09-26 00:48:14

線程池阻塞數據

2025-02-20 09:27:46

2021-12-28 15:10:01

線程池C語言編程語言

2022-03-09 09:43:01

工具類線程項目

2024-10-07 08:37:32

線程池C#管理機制

2025-02-25 12:00:00

Java線程開發(fā)

2021-10-12 09:24:02

Java線程池源碼

2020-12-23 09:48:37

數據工具技術

2025-07-23 08:13:10

2018-02-07 16:23:58

連接池內存池AI

2024-06-13 08:24:43

SpringGateway線程池

2024-10-06 14:37:52

2023-11-23 09:26:50

Java調優(yōu)

2024-08-07 09:59:56

2025-09-29 05:00:00

Linux線程棧內存

2023-12-29 09:38:00

Java線程池
點贊
收藏

51CTO技術棧公眾號

97人人模人人爽人人喊中文字| 日韩视频一区二区三区在线播放 | 一级久久久久久| 第一会所亚洲原创| 日韩欧美精品在线| 欧美 国产 小说 另类| www日韩tube| 国产成人精品一区二| 日韩av电影手机在线| 国产成人免费在线观看视频| 136福利精品导航| 色94色欧美sute亚洲线路一久| 99re99热| 好男人免费精品视频| 国产麻豆精品一区二区| 青青草原成人在线视频| 美女福利视频在线观看| 亚洲素人在线| 日韩美女视频一区二区在线观看| 国产一区二区视频免费在线观看| 污影院在线观看| 日本一区二区三区在线观看| 精品国产第一页| 国产成人精品免费看视频| 羞羞答答国产精品www一本 | 69xx绿帽三人行| 国产一区毛片| 亚洲国产精品成人va在线观看| 日韩大片一区二区| 黄色成人免费网| 亚洲成人你懂的| 男女爱爱视频网站| 四虎久久免费| 91天堂素人约啪| 91久久大香伊蕉在人线| 一区二区不卡视频在线观看| 久久久久国产精品午夜一区| 久久久视频在线| 激情五月少妇a| 91精品天堂福利在线观看| 亚洲色图15p| 亚洲制服丝袜在线播放| 99久久婷婷国产综合精品青牛牛| 欧美精品国产精品| 亚洲成人天堂网| 日本欧美韩国| 在线观看免费视频综合| 超碰网在线观看| 蜜桃视频m3u8在线观看| 性欧美大战久久久久久久久| 黄色三级中文字幕| av电影高清在线观看| 中文字幕亚洲一区二区av在线| 无码免费一区二区三区免费播放| 全部免费毛片在线播放网站| 91社区在线播放| 精品乱子伦一区二区三区| 日本精品久久久久| 91香蕉视频污| 欧美激情导航| 国产二区在线播放| 国产精品无码永久免费888| 先锋影音一区二区三区| 91在线品视觉盛宴免费| 亚洲欧洲成人自拍| 波多野结衣激情| 污污在线观看| 亚洲18女电影在线观看| 欧美黑人经典片免费观看| 自由日本语热亚洲人| 91福利小视频| 91精品999| 色悠久久久久综合先锋影音下载| 精品国产露脸精彩对白| 中文字幕av网址| 成人激情在线| 欧美床上激情在线观看| 精品无码人妻一区二区三区品| 亚洲国产三级| 国产成人午夜视频网址| 在线观看国产成人| 国产成人在线观看免费网站| 国产另类自拍| 高清毛片在线看| 亚洲欧美日韩国产一区二区三区| 国产精品三级一区二区| 在线看片福利| 欧美日韩一本到| 丰满少妇一区二区三区专区| 日韩高清电影免费| 精品激情国产视频| 激情综合网五月婷婷| 老妇喷水一区二区三区| 91精品综合久久久久久五月天| 精品人妻无码一区二区三区蜜桃一| 成人av在线网| 亚洲精品乱码久久久久久蜜桃91| 视频在线这里都是精品| 91福利在线免费观看| 精品人妻人人做人人爽夜夜爽| 丝袜美腿综合| 久久天天躁狠狠躁夜夜爽蜜月| 在线观看 中文字幕| 麻豆精品视频在线观看视频| 国产精品一区二区三区四区五区 | 欧美成人剧情片在线观看| 波多野结衣视频网站| 激情图片小说一区| 欧美婷婷久久| 毛片网站在线看| 欧美无乱码久久久免费午夜一区 | 久久久国产综合精品女国产盗摄| 97精品国产97久久久久久粉红 | 国产精品欧美在线| 蜜桃视频污在线观看| 亚洲欧洲日韩一区二区三区| av动漫在线看| 亚洲国产aⅴ精品一区二区| 一区二区三区四区在线观看视频| 久久久久成人网站| 激情欧美日韩一区二区| 日韩精品国内| 在线手机中文字幕| 精品国产一区二区三区av性色| 国产黄a三级三级| 爽爽淫人综合网网站| 国产视频在线观看一区| 超碰在线网址| 欧美丰满少妇xxxbbb| 国产jk精品白丝av在线观看| 一本色道88久久加勒比精品| 成人三级在线| 国产在线观看a| 欧美色网站导航| 国产全是老熟女太爽了| 国产精品久久久久久久免费软件| 99久久精品无码一区二区毛片| 黄色在线论坛| 欧美美女激情18p| 香蕉久久久久久久| 日韩精品电影在线| 日韩不卡av| 成人黄色免费短视频| 国产婷婷色综合av蜜臀av| 日韩久久久久久久久| av中文字幕在线不卡| 成人免费观看在线| 福利在线一区| 韩国精品久久久999| 日本人妻丰满熟妇久久久久久| 亚洲一区二区精品视频| 中文字幕一二三| 激情欧美日韩| 国产日韩欧美精品| 免费在线小视频| 日韩电影中文 亚洲精品乱码 | 欧美日韩免费一区二区三区视频| 免费看的黄色网| 免费看欧美美女黄的网站| 亚洲韩国在线| www一区二区三区| 久久国产精品免费视频 | 成人做爰免费视频免费看| 国产亚洲精品久久久| 中文字幕在线视频免费| 国产精品国产精品国产专区不片| www.久久久久久久久久久| 在线观看日韩| 国产精品加勒比| av日韩电影| 色综久久综合桃花网| 国产精品无码专区av免费播放| 亚洲精选视频免费看| 无码国产69精品久久久久网站| 亚洲免费综合| 一区二区三区av| 婷婷综合国产| 欧美在线视频免费| 日韩黄色影院| 精品久久久久一区二区国产| 黄色大片网站在线观看| 欧美激情一区二区三区不卡 | 涩涩涩久久久成人精品| 欧美极品少妇xxxxⅹ喷水| 无码国精品一区二区免费蜜桃| 日本韩国视频一区二区| 三上悠亚作品在线观看| av电影在线观看完整版一区二区| 日韩精品一区中文字幕| 亚洲天天综合| 欧美高清视频一区二区三区在线观看| 成人免费毛片嘿嘿连载视频…| 另类美女黄大片| 亚洲av成人精品毛片| 欧美日韩国产在线播放网站| 国产精彩视频在线观看| 欧美高清在线视频| 看全色黄大色黄女片18| 麻豆freexxxx性91精品| 97超碰在线人人| 久久在线电影| 久久精品ww人人做人人爽| 国产精品成人3p一区二区三区| 91超碰caoporn97人人| 国产在线观看91| 国产一区二区三区毛片| 亚洲精品成人电影| 欧美日韩一级视频| 你懂的国产在线| 一区二区三区在线影院| 亚洲精品国产精品国自| 99久久亚洲一区二区三区青草| 色18美女社区| 天堂精品中文字幕在线| av日韩一区二区三区| 99国产精品一区二区| 欧美日韩精品免费观看视一区二区| 国产视频一区二| 国产精品美女网站| 成人福利视频| 97久久精品视频| 黄色在线看片| 久久综合九色九九| yjizz视频网站在线播放| 亚洲欧美日韩爽爽影院| 欧美熟妇另类久久久久久不卡 | 亚洲欧美一区二区三区孕妇| 免费观看a级片| 久久综合色天天久久综合图片| 91亚洲一线产区二线产区| 精品亚洲porn| 久久久久久蜜桃一区二区| 丝袜脚交一区二区| 欧美成人精品欧美一级乱| 亚洲免费精品| 国产96在线 | 亚洲| 欧美网站在线| 亚洲国产一二三精品无码| 我不卡神马影院| 在线视频不卡国产| 四虎8848精品成人免费网站| 亚洲精品一区二区毛豆| 欧美日韩亚洲在线观看| 日韩欧美在线电影| 色乱码一区二区三区网站| 五月天国产一区| 日本a口亚洲| 亚洲国产精品一区二区第四页av| 清纯唯美亚洲综合一区| 天堂精品视频| 欧美3p视频| 伊人久久大香线蕉精品| 久久精品久久久| 日本一区二区三区四区五区六区| 欧美成人一品| 日韩网站中文字幕| 亚洲国产精品999| 亚洲精品一区二区三区不卡| 欧美xxxx在线观看| 好吊视频一二三区| 日韩国产精品亚洲а∨天堂免| 香蕉视频免费看| 亚洲欧美制服第一页| www.中文字幕久久久| 日韩视频精品在线| av网址在线| 久久久久久成人精品| 热三久草你在线| 国产成人亚洲精品| 一区二区三区无毛| 超碰97人人人人人蜜桃| 欧美人与动xxxxz0oz| 欧美深深色噜噜狠狠yyy| 97色伦图片97综合影院| 蜜桃视频一区二区在线观看| 亚洲国产一区二区精品专区| 国产日韩一区二区在线观看| 人人精品人人爱| 亚洲成人激情小说| 99re这里只有精品视频首页| 欧美黄色高清视频| 亚洲欧美二区三区| 91美女免费看| 欧美日韩黄色影视| 熟妇人妻系列aⅴ无码专区友真希| 亚洲色图美腿丝袜| 中文字幕伦理免费在线视频 | 亚洲国产精品久久久久| 国产专区在线| 欧美刺激性大交免费视频| 午夜久久中文| 国产日韩中文在线| 精品视频自拍| 亚洲欧洲国产精品久久| 日韩一级免费| 911福利视频| 91免费看片在线观看| 欧美日韩色视频| 欧美日韩一区二区在线 | 紧缚捆绑精品一区二区| 日韩av手机在线播放| 成人免费在线视频观看| 国产精品第72页| 欧美日本不卡视频| 色中色在线视频| 欧美猛交ⅹxxx乱大交视频| 亚洲www免费| 国产综合欧美在线看| 999久久久国产精品| 欧美aⅴ在线观看| 国产成人亚洲精品青草天美| 女女互磨互喷水高潮les呻吟| 亚洲综合久久av| 91福利在线观看视频| 亚洲男人天堂2019| 888av在线视频| 亚洲在线一区二区| 日韩成人激情| 日韩有码免费视频| av成人免费在线| 九九热视频精品| 3751色影院一区二区三区| 国产福利在线| 国产91在线高潮白浆在线观看| youjizzjizz亚洲| 一区二区三区四区免费观看| 免费人成在线不卡| аⅴ天堂中文在线网| 欧美日韩中文字幕在线| 蜜桃视频久久一区免费观看入口| 九九精品在线观看| 国产aa精品| 国产精品av免费| 久99久精品视频免费观看| 中文字幕伦理片| 欧美亚洲综合网| 国产青青草在线| 国产精品电影一区| 国产在视频线精品视频www666| 日韩中文字幕三区| xnxx国产精品| 中文字幕精品无码一区二区| 亚洲国产精品中文| 蜜桃视频m3u8在线观看| 精品一区二区三区视频日产| 日韩一级免费| 亚洲AV无码片久久精品| 日韩欧亚中文在线| 麻豆国产在线播放| 国产精品99一区| 日本午夜一区| jizz欧美性11| 中文字幕色av一区二区三区| 国产精品一区二区免费视频| 久久精品久久久久久| 精品国产鲁一鲁****| 国产激情片在线观看| 高清不卡一区二区| 麻豆视频在线观看| 亚洲国产欧美一区二区三区久久| 这里有精品可以观看| 日韩欧美99| 狠狠v欧美v日韩v亚洲ⅴ| 青青草手机视频在线观看| 精品三级av在线| 美女福利一区二区| 亚洲人体一区| 国产91精品一区二区麻豆亚洲| 九九九国产视频| 夜夜躁日日躁狠狠久久88av| 欧洲精品久久久久毛片完整版| 亚洲黄色网址在线观看| 成人精品视频一区二区三区尤物| 亚洲天堂av片| 精品久久久av| 欧美久久香蕉| 一区二区xxx| 伊人婷婷欧美激情| 亚洲区小说区图片区| 国产精品入口尤物| 欧美视频一区| 美女爆乳18禁www久久久久久| 欧美日韩极品在线观看一区| 欧美人体视频xxxxx| 欧美裸体网站| 国产美女在线观看一区| 精品成人av一区二区在线播放| 中文字幕一区日韩电影| 97久久综合区小说区图片区| 黑鬼大战白妞高潮喷白浆| 亚洲日本在线观看| 亚州精品国产精品乱码不99按摩| 91精品国产综合久久香蕉| 亚洲东热激情| 激情五月激情综合| 亚洲精品一区二区网址| 久久久久久久久成人| 国产视频在线视频| 一区二区三区免费看视频| 国产精品99999|