欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java concurrency線程池之線程池原理(一)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

 更新時(shí)間:2017年06月13日 10:29:15   作者:skywang12345  
這篇文章主要為大家詳細(xì)介紹了Java concurrency線程池之線程池原理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

ThreadPoolExecutor簡介

ThreadPoolExecutor是線程池類。對于線程池,可以通俗的將它理解為"存放一定數(shù)量線程的一個(gè)線程集合。線程池允許若個(gè)線程同時(shí)允許,允許同時(shí)運(yùn)行的線程數(shù)量就是線程池的容量;當(dāng)添加的到線程池中的線程超過它的容量時(shí),會(huì)有一部分線程阻塞等待。線程池會(huì)通過相應(yīng)的調(diào)度策略和拒絕策略,對添加到線程池中的線程進(jìn)行管理。" 

ThreadPoolExecutor數(shù)據(jù)結(jié)構(gòu)

ThreadPoolExecutor的數(shù)據(jù)結(jié)構(gòu)如下圖所示:

各個(gè)數(shù)據(jù)在ThreadPoolExecutor.java中的定義如下:

// 阻塞隊(duì)列。
private final BlockingQueue<Runnable> workQueue;
// 互斥鎖
private final ReentrantLock mainLock = new ReentrantLock();
// 線程集合。一個(gè)Worker對應(yīng)一個(gè)線程。
private final HashSet<Worker> workers = new HashSet<Worker>();
// “終止條件”,與“mainLock”綁定。
private final Condition termination = mainLock.newCondition();
// 線程池中線程數(shù)量曾經(jīng)達(dá)到過的最大值。
private int largestPoolSize;
// 已完成任務(wù)數(shù)量
private long completedTaskCount;
// ThreadFactory對象,用于創(chuàng)建線程。
private volatile ThreadFactory threadFactory;
// 拒絕策略的處理句柄。
private volatile RejectedExecutionHandler handler;
// 保持線程存活時(shí)間。
private volatile long keepAliveTime;

private volatile boolean allowCoreThreadTimeOut;
// 核心池大小
private volatile int corePoolSize;
// 最大池大小
private volatile int maximumPoolSize;

 

1. workers

    workers是HashSet<Work>類型,即它是一個(gè)Worker集合。而一個(gè)Worker對應(yīng)一個(gè)線程,也就是說線程池通過workers包含了"一個(gè)線程集合"。當(dāng)Worker對應(yīng)的線程池啟動(dòng)時(shí),它會(huì)執(zhí)行線程池中的任務(wù);當(dāng)執(zhí)行完一個(gè)任務(wù)后,它會(huì)從線程池的阻塞隊(duì)列中取出一個(gè)阻塞的任務(wù)來繼續(xù)運(yùn)行。
    wokers的作用是,線程池通過它實(shí)現(xiàn)了"允許多個(gè)線程同時(shí)運(yùn)行"。

2. workQueue

    workQueue是BlockingQueue類型,即它是一個(gè)阻塞隊(duì)列。當(dāng)線程池中的線程數(shù)超過它的容量的時(shí)候,線程會(huì)進(jìn)入阻塞隊(duì)列進(jìn)行阻塞等待。
    通過workQueue,線程池實(shí)現(xiàn)了阻塞功能。

3. mainLock

    mainLock是互斥鎖,通過mainLock實(shí)現(xiàn)了對線程池的互斥訪問。

4. corePoolSize和maximumPoolSize

    corePoolSize是"核心池大小",maximumPoolSize是"最大池大小"。它們的作用是調(diào)整"線程池中實(shí)際運(yùn)行的線程的數(shù)量"。
    例如,當(dāng)新任務(wù)提交給線程池時(shí)(通過execute方法)。
          -- 如果此時(shí),線程池中運(yùn)行的線程數(shù)量< corePoolSize,則創(chuàng)建新線程來處理請求。
          -- 如果此時(shí),線程池中運(yùn)行的線程數(shù)量> corePoolSize,但是卻< maximumPoolSize;則僅當(dāng)阻塞隊(duì)列滿時(shí)才創(chuàng)建新線程。
          如果設(shè)置的 corePoolSize 和 maximumPoolSize 相同,則創(chuàng)建了固定大小的線程池。如果將 maximumPoolSize 設(shè)置為基本的無界值(如 Integer.MAX_VALUE),則允許池適應(yīng)任意數(shù)量的并發(fā)任務(wù)。在大多數(shù)情況下,核心池大小和最大池大小的值是在創(chuàng)建線程池設(shè)置的;但是,也可以使用 setCorePoolSize(int) 和 setMaximumPoolSize(int) 進(jìn)行動(dòng)態(tài)更改。

5. poolSize

    poolSize是當(dāng)前線程池的實(shí)際大小,即線程池中任務(wù)的數(shù)量。

6. allowCoreThreadTimeOut和keepAliveTime

    allowCoreThreadTimeOut表示是否允許"線程在空閑狀態(tài)時(shí),仍然能夠存活";而keepAliveTime是當(dāng)線程池處于空閑狀態(tài)的時(shí)候,超過keepAliveTime時(shí)間之后,空閑的線程會(huì)被終止。

7. threadFactory

    threadFactory是ThreadFactory對象。它是一個(gè)線程工廠類,"線程池通過ThreadFactory創(chuàng)建線程"。

8. handler

    handler是RejectedExecutionHandler類型。它是"線程池拒絕策略"的句柄,也就是說"當(dāng)某任務(wù)添加到線程池中,而線程池拒絕該任務(wù)時(shí),線程池會(huì)通過handler進(jìn)行相應(yīng)的處理"。

綜上所說,線程池通過workers來管理"線程集合",每個(gè)線程在啟動(dòng)后,會(huì)執(zhí)行線程池中的任務(wù);當(dāng)一個(gè)任務(wù)執(zhí)行完后,它會(huì)從線程池的阻塞隊(duì)列中取出任務(wù)來繼續(xù)運(yùn)行。阻塞隊(duì)列是管理線程池任務(wù)的隊(duì)列,當(dāng)添加到線程池中的任務(wù)超過線程池的容量時(shí),該任務(wù)就會(huì)進(jìn)入阻塞隊(duì)列進(jìn)行等待。 

線程池調(diào)度

我們通過下面的圖看看下面線程池中任務(wù)的調(diào)度策略,加深對線程池的理解。

圖-01:

圖-02:

說明:

    在"圖-01"中,線程池中有N個(gè)任務(wù)。"任務(wù)1", "任務(wù)2", "任務(wù)3"這3個(gè)任務(wù)在執(zhí)行,而"任務(wù)3"到"任務(wù)N"在阻塞隊(duì)列中等待。正在執(zhí)行的任務(wù),在workers集合中,workers集合包含3個(gè)Worker,每一個(gè)Worker對應(yīng)一個(gè)Thread線程,Thread線程每次處理一個(gè)任務(wù)。
    當(dāng)workers集合中處理完某一個(gè)任務(wù)之后,會(huì)從阻塞隊(duì)列中取出一個(gè)任務(wù)來繼續(xù)執(zhí)行,如圖-02所示。圖-02表示"任務(wù)1"處理完畢之后,線程池將"任務(wù)4"從阻塞隊(duì)列中取出,放到workers中進(jìn)行處理。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java模仿實(shí)現(xiàn)QQ登錄界面

    java模仿實(shí)現(xiàn)QQ登錄界面

    這篇文章主要為大家詳細(xì)介紹了java模仿實(shí)現(xiàn)qq登錄界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • springboot vue 跨域問題的解決

    springboot vue 跨域問題的解決

    這篇文章主要介紹了springboot vue 跨域問題的解決,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-10-10
  • mybatisplus實(shí)現(xiàn)自動(dòng)填充時(shí)間的項(xiàng)目實(shí)踐

    mybatisplus實(shí)現(xiàn)自動(dòng)填充時(shí)間的項(xiàng)目實(shí)踐

    在數(shù)據(jù)庫操作中,頻繁設(shè)置創(chuàng)建時(shí)間和更新時(shí)間字段非常繁瑣,通過使用MyBatis-Plus的自動(dòng)填充功能,可以簡化操作,本文就來詳細(xì)的介紹一下,感興趣的可以了解一下
    2024-10-10
  • Mybatis Generator Plugin悲觀鎖實(shí)現(xiàn)示例

    Mybatis Generator Plugin悲觀鎖實(shí)現(xiàn)示例

    本文將從悲觀鎖為例,讓你快速了解如何實(shí)現(xiàn)Mybatis Generator Plugin。文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 淺析JAVA中toString方法的作用

    淺析JAVA中toString方法的作用

    以下是對在JAVA中toString方法的作用進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以參考下
    2013-07-07
  • Java PreparedStatement用法詳解

    Java PreparedStatement用法詳解

    這篇文章主要介紹了Java PreparedStatement用法詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • java中char對應(yīng)的ASCII碼的轉(zhuǎn)化操作

    java中char對應(yīng)的ASCII碼的轉(zhuǎn)化操作

    這篇文章主要介紹了java中char對應(yīng)的ASCII碼的轉(zhuǎn)化操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Java 實(shí)現(xiàn)限流器處理Rest接口請求詳解流程

    Java 實(shí)現(xiàn)限流器處理Rest接口請求詳解流程

    在工作中是否會(huì)碰到這樣的場景,高并發(fā)的請求但是無法全部執(zhí)行,需要一定的限流。如果你是使用的微服務(wù)框架,比如SpringCloud,可以使用Gateway增加限流策略來解決。本篇文章是在沒有框架的情況實(shí)現(xiàn)限流器
    2021-11-11
  • SpringBoot Event實(shí)現(xiàn)異步消費(fèi)機(jī)制的示例代碼

    SpringBoot Event實(shí)現(xiàn)異步消費(fèi)機(jī)制的示例代碼

    這篇文章主要介紹了SpringBoot Event實(shí)現(xiàn)異步消費(fèi)機(jī)制,ApplicationEvent以及Listener是Spring為我們提供的一個(gè)事件監(jiān)聽、訂閱的實(shí)現(xiàn),內(nèi)部實(shí)現(xiàn)原理是觀察者設(shè)計(jì)模式,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下
    2024-04-04
  • SpringSecurity構(gòu)建基于JWT的登錄認(rèn)證實(shí)現(xiàn)

    SpringSecurity構(gòu)建基于JWT的登錄認(rèn)證實(shí)現(xiàn)

    這篇文章主要介紹了SpringSecurity構(gòu)建基于JWT的登錄認(rèn)證實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02

最新評論