精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

在线免费观看污视频| 成人av影视在线| 男男受被啪到高潮自述| 18在线观看的| 99久久精品国产观看| 国产91成人在在线播放| 毛片网站免费观看| 日韩成人一区| 精品国产乱码久久久久久天美 | 一区二区视频免费在线观看| 久久精品日产第一区二区三区| 在线视频1卡二卡三卡| 中文字幕一区二区三区在线视频| 91在线云播放| 国产精品99一区| 久久久久久久久艹| 国产精品亚洲片在线播放| 日韩一级免费一区| 国产免费视频传媒| 超碰在线caoporn| 国产亚洲va综合人人澡精品| 99国产在线观看| 伊人网站在线观看| 亚洲免费综合| 久久91亚洲精品中文字幕奶水| 艳妇乳肉亭妇荡乳av| 色综合天天色| 欧美日韩在线观看视频| 亚洲午夜高清视频| 少妇激情av一区二区| 免费成人在线观看视频| 国外成人免费在线播放| 亚洲欧美另类日本| 欧美国产极品| 欧美日韩成人综合在线一区二区| 在线看成人av电影| 六月丁香综合网| 日韩黄色免费电影| 欧美尤物巨大精品爽| 老妇女50岁三级| 精品日韩一区| 国产午夜精品理论片a级探花| 亚洲av无日韩毛片久久| 亚洲综合在线电影| 欧美日韩黄色大片| 狠狠精品干练久久久无码中文字幕| 色鬼7777久久| 成人午夜激情影院| 成人黄色av网站| 国产一区二区视频免费| 影音先锋亚洲精品| 久久91亚洲精品中文字幕| 国产精品99久久久久久成人| 精品视频亚洲| 亚洲欧美中文字幕| 免费的av网站| 九九热hot精品视频在线播放 | 免费黄色特级片| 福利影院在线看| 亚洲国产精品尤物yw在线观看| 伊人久久av导航| 波多野结衣在线影院| 久久综合色婷婷| 精品国产91亚洲一区二区三区www 精品国产_亚洲人成在线 | 欧美乱妇高清无乱码| 五月天激情丁香| 久久久久免费av| 色婷婷成人综合| 可以免费看av的网址| 日本中文字幕在线一区| 亚洲第一福利网站| 黄色国产在线视频| jazzjazz国产精品久久| 精品av久久707| 亚洲一级Av无码毛片久久精品| 91成人精品在线| 精品免费视频.| 久久人妻一区二区| 日韩视频网站在线观看| 欧美日韩亚洲高清一区二区| 黄色国产精品视频| 精品176极品一区| 91精品国产综合久久香蕉的特点 | 久久久国产精品成人免费| 欧美精品色网| 68精品久久久久久欧美| 日韩欧美在线观看免费| 日韩不卡免费视频| 国产欧美在线看| 999av视频| 国产成人精品免费一区二区| 国产精品日韩一区二区三区| 无码国精品一区二区免费蜜桃| 91在线视频播放地址| 蜜桃av噜噜一区二区三区| 国产午夜精品一区理论片| 国产精品久久一级| 久久久久久久香蕉| 筱崎爱全乳无删减在线观看| 欧洲一区在线观看| 日本人视频jizz页码69| 亚洲91网站| 日韩电视剧在线观看免费网站 | 2020国产精品自拍| 亚洲欧洲中文| 黄a在线观看| 亚洲成a人片综合在线| 国产99久久九九精品无码| 外国电影一区二区| 欧美大胆人体bbbb| 国产免费看av| 午夜精品久久| 国产成人av在线| 国产毛片毛片毛片毛片| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 成人h在线观看| 日韩一区和二区| 日本xxx在线播放| 天天操夜夜操国产精品| 91精品国产91久久久久久| 中文字幕在线观看第二页| 粉嫩av一区二区三区粉嫩| 日韩一区不卡| h片精品在线观看| 欧美精品亚洲一区二区在线播放| 拔插拔插华人永久免费| 色愁久久久久久| 成年人精品视频| 黄色一级视频免费看| 国产在线视频一区二区三区| 久久久久久久免费| 午夜影院免费在线| 色呦呦一区二区三区| 波多野结衣网页| 精品国产精品| 亚洲91精品在线观看| 国产免费黄色片| 日本一区二区三级电影在线观看| 分分操这里只有精品| 日韩av黄色| 在线看日韩欧美| 国产午夜性春猛交ⅹxxx| 国产精品一二三区| 一区二区不卡在线视频 午夜欧美不卡'| 电影在线观看一区| 精品国产三级电影在线观看| 欧美丰满熟妇bbbbbb| 蜜臀av国产精品久久久久| 不卡视频一区二区| 男女视频在线观看| 亚州成人在线电影| 下面一进一出好爽视频| 欧美超碰在线| 国产精品日日做人人爱| 黄色在线小视频| 精品人伦一区二区三区蜜桃免费 | www.99re6| 日产欧产美韩系列久久99| 国模一区二区三区私拍视频| 欧美videosex性欧美黑吊| 欧美一区二区三区日韩| 国产3级在线观看| 免播放器亚洲一区| 日韩国产伦理| 亚洲精品555| 中文字幕欧美亚洲| 亚洲图片在线播放| 国产精品午夜电影| 日韩一级免费片| 91亚洲成人| 成人国产精品久久久久久亚洲| 日日夜夜精品一区| 欧美巨大另类极品videosbest| 亚洲ⅴ国产v天堂a无码二区| 免费观看在线色综合| 亚洲欧洲精品在线| 美女色狠狠久久| 中文字幕一区二区精品| 国产精品一区二区黑人巨大 | 97久久夜色精品国产九色| www 日韩| 欧美日韩精品一区视频| 欧美日韩亚洲国产另类| 成人不卡免费av| av免费观看网| 精品国产一级毛片| 国产精品免费视频xxxx| 欧美日本一道| 日韩三级在线观看| 国产乡下妇女做爰视频| 久久久久一区二区三区四区| 五月婷婷丁香综合网| 亚洲欧洲中文字幕| 风间由美一区二区三区| 激情国产在线| 中文字幕日韩精品有码视频| 国产精品一区二区人人爽| 亚洲卡通欧美制服中文| 国产日韩视频一区| 久久精品亚洲| 香蕉精品视频在线| 精品欠久久久中文字幕加勒比| 热99精品里视频精品| 婷婷免费在线视频| 精品免费99久久| 国产精品一区无码| 亚洲欧美另类图片小说| 中国极品少妇xxxx| 日韩精品成人一区二区在线| 日本高清xxxx| 欧美日韩播放| 成人看片人aa| www成人免费观看| 国产一区二区三区视频免费| a在线观看视频| 色成年激情久久综合| 精品国产视频一区二区三区| 91免费观看在线| 久久精品一二三四| 国产伦理一区| www.-级毛片线天内射视视| 色先锋久久影院av| 亚洲精品日韩av| 色天使综合视频| 午夜精品在线观看| 最近高清中文在线字幕在线观看| 精品国产一区二区三区久久久蜜月| 一级一片免费看| 亚洲精品写真福利| 久久久久久久久久久久| 懂色av中文一区二区三区 | 人妖欧美1区| 久久久999精品| 国产午夜精品一区理论片| 精品国产成人在线影院 | 日韩一区二区精品在线观看| 久久精品视频5| 亚洲不卡av一区二区三区| 日韩欧美视频免费观看| 26uuu国产在线精品一区二区| 中文字幕在线观看视频www| 奇米888四色在线精品| 日韩免费视频播放| 欧美深夜福利| 色婷婷777777仙踪林| 国产一区2区| 日韩欧美亚洲日产国| 欧美丝袜足交| 国产一区二区精品免费| 亚洲日本视频在线| 91精品国产自产在线观看永久| 欧美日韩大片| 青青久久av北条麻妃黑人| 国产精品蜜臀| 欧美二区乱c黑人| 成人短视频在线| 久久夜色精品国产欧美乱| 日本免费中文字幕在线| 中文日韩电影网站| 你懂的在线网址| 精品福利av导航| 国产成人三级在线播放 | 久久久之久亚州精品露出| 手机在线免费看av| 欧美成人中文字幕在线| 18网站在线观看| 欧美日韩成人在线视频| 亚洲欧美成人影院| 欧美激情18p| 激情视频网站在线播放色| 久久综合伊人77777蜜臀| 亚洲s色大片| 色一区av在线| 色黄网站在线观看| 97激碰免费视频| 樱桃视频成人在线观看| 国产不卡视频在线| 成人免费在线观看视频| 成人国产精品免费视频| 欧美视频精品全部免费观看| 成人片在线免费看| 日韩av午夜| 色综合久久av| 亚洲综合色站| 国产精品久久国产| 亚洲性图久久| 免费观看成人在线视频| 美女一区二区三区在线观看| 久久6免费视频| 成人国产在线观看| 欧美熟妇一区二区| 国产精品久久综合| 久久网免费视频| 色综合天天综合网天天看片| 欧美成人一区二区视频| 91精品麻豆日日躁夜夜躁| 少妇荡乳情欲办公室456视频| 亚洲精品乱码久久久久久按摩观| 欧美婷婷久久五月精品三区| 久久精品国产欧美激情| 玖玖在线播放| 国产精品一二三在线| 视频在线亚洲| 欧美性bbwbbwbbwhd| 亚洲xxx拳头交| 国产黄色一级网站| 精品一区二区三区在线播放视频 | 91丝袜呻吟高潮美腿白嫩在线观看| 成都免费高清电影| 一二三区精品视频| 亚洲精品午夜国产va久久成人| 日韩一区二区三区视频在线观看| 天堂在线一二区| 偷窥少妇高潮呻吟av久久免费 | 婷婷夜色潮精品综合在线| 日本三级一区二区三区| 欧美xxxxxxxxx| 北岛玲一区二区三区| 欧美黄色片视频| 日日夜夜亚洲| 久久综合一区二区三区| 欧美一区在线看| 亚洲精品怡红院| 成人av手机在线观看| 国产呦小j女精品视频| 一区二区三区久久| 一区二区三区在线免费观看视频| 亚洲第一视频网| 欧美边添边摸边做边爱免费| 欧美亚洲另类制服自拍| 9l视频自拍蝌蚪9l视频成人| 亚洲精品欧美精品| 亚洲专区一区| 91精品人妻一区二区三区蜜桃2 | 国产亚洲一级| 日本女人性视频| 国产精品入口麻豆原神| 欧产日产国产69| 亚洲成色www8888| 在线播放毛片| 欧美最猛性xxxxx免费| 少妇精品导航| 秋霞无码一区二区| 国产传媒欧美日韩成人| 日韩av网站在线播放| 在线视频综合导航| 日韩大胆视频| 96精品视频在线| 欧美日韩一本| 男人日女人bb视频| 风流少妇一区二区| 精品少妇久久久久久888优播| 91精品国模一区二区三区| 男人天堂久久久| 成人在线一区二区| 97视频热人人精品免费| av污在线观看| 中文字幕 久热精品 视频在线| 人人草在线观看| 亚洲香蕉成视频在线观看| 韩国久久久久久| 不卡一区二区三区四区五区| 欧美在线播放| 老司机av网站| 亚洲午夜精品17c| 国产成人自拍一区| 久久久噜噜噜久噜久久| 久久亚洲黄色| 国产亚洲天堂网| 久久久国产一区二区三区四区小说 | 国产成人免费| 在线无限看免费粉色视频| 麻豆久久久久久久| wwwav国产| 欧美精品一区二区三区在线 | 亚洲欧洲日韩av| 国产成人精品a视频| 欧美极品少妇与黑人| 热三久草你在线| 免费成人av网站| 日韩专区中文字幕一区二区| 国产91丝袜美女在线播放| 欧美日韩国产一级| 中文字幕在线观看网站| 国产精品区二区三区日本| 国产一区二区三区久久久久久久久| 国产精品一区二区人妻喷水| 天天亚洲美女在线视频| 国产区视频在线| 亚洲影院色无极综合| 国内自拍视频一区二区三区| 欧美 变态 另类 人妖| 在线免费观看日韩欧美| 国产调教视频在线观看| 国产区一区二区三区| 久久高清国产| 黄色录像免费观看| 日韩欧美国产三级电影视频| 成人影音在线| 视频一区二区在线观看|