大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) hot資訊 深入探究線程池的工作原理

深入探究線程池的工作原理

更新時(shí)間:2020-11-16 17:32:34 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1864次

我們?cè)诠ぷ髦谢蚨嗷蛏俣际褂眠^(guò)線程池,但是為什么要使用線程池呢?從他的名字中我們就應(yīng)該知道,線程池使用了一種池化技術(shù),和很多其他池化技術(shù)一樣,都是為了更高效的利用資源,例如鏈接池,內(nèi)存池等等。那么,線程池的工作原理到底是怎樣的呢?


實(shí)際上,線程池是一種生產(chǎn)者 - 消費(fèi)者模式,線程池的使用方是生產(chǎn)者,線程池本身是消費(fèi)者。我們可以通過(guò)下面的代碼來(lái)理解線程池的工作原理。

public class ThreadPoolDemo {

//利用阻塞隊(duì)列實(shí)現(xiàn)生產(chǎn)者-消費(fèi)者模式

BlockingQueueworkQueue;

//保存內(nèi)部工作線程

Listthreads = new ArrayList<>();

private ThreadPoolDemo(int poolSize, BlockingQueueworkQueue) {

this.workQueue = workQueue;

// 創(chuàng)建工作線程

for (int idx = 0; idx < poolSize; idx++) {

WorkerThread work = new WorkerThread();

work.start();

threads.add(work);

}

}

// 提交任務(wù)

public void execute(Runnable command) throws InterruptedException {

workQueue.put(command);

}

// 工作線程負(fù)責(zé)消費(fèi)任務(wù),并執(zhí)行任務(wù)

class WorkerThread extends Thread {

public void run() {

//循環(huán)取任務(wù)并執(zhí)行

while (true) {

Runnable task = null;

try {

task = workQueue.take();

} catch (InterruptedException e) {

e.printStackTrace();

}

assert task != null;

task.run();

}

}

}

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

BlockingQueueworkQueue =

new LinkedBlockingQueue<>(2);

// 創(chuàng)建線程池

ThreadPoolDemo pool = new ThreadPoolDemo(10, workQueue);

// 提交任務(wù)

pool.execute(()->{

System.out.println("hello world");

});

}

}

通過(guò)上面的Demo可見(jiàn),線程池的創(chuàng)建都是通過(guò)ThreadPoolExecutor完成的,來(lái)看一下它的構(gòu)造方法。

# -> ThreadPoolExecutor構(gòu)造方法

public ThreadPoolExecutor(int corePoolSize,

int maximumPoolSize,

long keepAliveTime,

TimeUnit unit,

BlockingQueueworkQueue) {

this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,

Executors.defaultThreadFactory(), defaultHandler);

}

public ThreadPoolExecutor(int corePoolSize,

int maximumPoolSize,

long keepAliveTime,

TimeUnit unit,

BlockingQueueworkQueue,

ThreadFactory threadFactory,

RejectedExecutionHandler handler) {

...

this.corePoolSize = corePoolSize;

this.maximumPoolSize = maximumPoolSize;

this.workQueue = workQueue;

this.keepAliveTime = unit.toNanos(keepAliveTime);

this.threadFactory = threadFactory;

this.handler = handler;

}


構(gòu)造方法聲明的一系列參數(shù)非常重要,理解了它們線程池的基本原理你就掌握了,我們來(lái)看看他們的具體含義:

corePoolSize 核心線程數(shù),除非設(shè)置核心線程超時(shí)(allowCoreThreadTimeOut),線程一直存活在線程池中,即使線程處于空閑狀態(tài)。

maximumPoolSize 線程池中允許存在的最大線程數(shù)。

workQueue 工作隊(duì)列,當(dāng)核心線程都處于繁忙狀態(tài)時(shí),將任務(wù)提交到工作隊(duì)列中。如果工作隊(duì)列也超過(guò)了容量,會(huì)去嘗試創(chuàng)建一個(gè)非核心線程執(zhí)行任務(wù)。

keepAliveTime 非核心線程處理空閑狀態(tài)的最長(zhǎng)時(shí)間,超過(guò)該值線程則會(huì)被回收。

threadFactory 線程工廠類,用于創(chuàng)建線程。

RejectedExecutionHandler 工作隊(duì)列飽和策略,比如丟棄、拋出異常等。

線程池創(chuàng)建完成后,可通過(guò)execute方法提交任務(wù),線程池根據(jù)當(dāng)前運(yùn)行狀態(tài)和特定參數(shù)對(duì)任務(wù)進(jìn)處理,整體模型如下圖:

image.png


在 ThreadPoolDemo 的內(nèi)部,維護(hù)了一個(gè)阻塞隊(duì)列 workQueue 和一組工作線程,工作線程的個(gè)數(shù)由構(gòu)造函數(shù)中的 poolSize 來(lái)指定。用戶通過(guò)調(diào)用 execute() 方法來(lái)提交 Runnable 任務(wù),execute() 方法的內(nèi)部實(shí)現(xiàn)僅僅是將任務(wù)加入到 workQueue 中。ThreadPoolDemo 內(nèi)部維護(hù)的工作線程會(huì)消費(fèi) workQueue 中的任務(wù)并執(zhí)行任務(wù),相關(guān)的代碼就是代碼中的 while 循環(huán)。


以上就是對(duì)線程池的工作原理的探究,就整個(gè)線程池工作原理而言,其中最重要的還是線程池的飽和策略,用戶通過(guò)實(shí)現(xiàn)RejectedExecutionHandler接口自定義飽和策略,并通過(guò)ThreadPoolExecutor多參的構(gòu)造函數(shù)傳入。也許你看完了本文,對(duì)線程池的工作原理理解的還不夠透徹,那么請(qǐng)觀看本站的多線程教程吧,讓你全面掌握多線程相關(guān)知識(shí)!


提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)

  • 全國(guó)校區(qū) 2025-06-26 搶座中
免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 精品日产1区2区 | 免费精品美女久久久久久久久 | 日韩精品一区二区三区中文字幕 | 免费观看黄色 | 日韩中文字幕免费观看 | 色噜噜狠狠狠狠色综合久一 | 国产 在线 | 日韩 | 五月婷婷激情四射 | 思99热精品久久只有精品 | 日本精品视频 | 成人精品视频网站 | 狠狠干综合| 亚洲欧美v视色一区二区 | 国产成人18黄禁网站免费观看 | 真人特级毛片免费视频 | 农村寡妇一级毛片免费看视频 | 66av99精品福利视频在线 | 亚洲综合国产 | 99爱国产| 免费午夜剧场 | 亚洲精品久久久久久久久久久网站 | 日韩中文字幕在线视频 | 人人揉揉香蕉大免费不卡 | 青青青激情视频在线最新 | 国产精品久久二区三区色裕 | 在线观看欧美亚洲日本专区 | 国产乱码一区二区三区 | 一级不卡毛片免费 | 久久亚洲国产成人亚 | 亚洲涩福利高清在线 | 国产乱子伦一级毛片 | 永久福利视频 | 久久视屏这里只有精品6国产 | 精品久久伦理中文字幕 | 欧美激情在线精品一区二区 | 国产精品毛片久久久久久久 | 九九热九九热 | 性xxxxxx| 国产欧美一区二区精品仙草咪 | 黄色在线免费观看 | 激情欧美一区二区三区中文字幕 |