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

Java多線程中的ThreadPoolExecutor使用解析

 更新時間:2023年12月07日 08:39:37   作者:小柴林  
這篇文章主要介紹了Java多線程中的ThreadPoolExecutor使用解析,作為線程池的緩沖,當新增線程超過maximumPoolSize時,會將新增線程暫時存放到該隊列中,需要的朋友可以參考下

ThreadPoolExecutor繼承關系結構

ThreadPoolExecutor初始化構造方法

public ThreadPoolExecutor(int corePoolSize,    #核心線程池大小,包括空閑線程。
                        int maximumPoolSize,   #線程池最大線程數(shù)
                          long keepAliveTime,  #超過corePoolSize的空閑線程保持存活的時長
                          TimeUnit unit,       #keepAliveTime時長單位
                          BlockingQueue<Runnable> workQueue    #存放待處理線程的Queue
                          ThreadFactory threadFactory,         #線程工廠對象,定制化線程池的線程屬性(name,uncaughtException(),daemon,priority)
                          RejectedExecutionHandler handler)    #異常拒絕處理器,處理任務被拒絕執(zhí)行時的行為;默認new AbortPolicy()

 ThreadPoolExecutor方法

int getCorePoolSize()        #返回核心線程數(shù)量
int getMaximumPoolSize()     #返回最大的線程數(shù)量
int getPoolSize()            #返回當前線程池中的線程數(shù)量,包括在運行或休眠,new ThreadPoolExecutor()不會立馬創(chuàng)建可用線程
int getQueue().size()        #返回等待執(zhí)行線程的隊列數(shù)量
void shutdown()              #不再添加新task,使當前未執(zhí)行完的線程繼續(xù)執(zhí)行,不會阻塞主線程main,調用shutdown()后,主線程馬上結束,而線程池繼續(xù)執(zhí)行直到任務執(zhí)行完畢;shutdown()使線程池狀態(tài)立即變成SHUTDOWN狀態(tài)
List<Runnable> shutdownNow() #中斷所有Task并且拋出InterruptesException異常,前提是線程中使用Thread.currentThread().isInterrupted()判斷當前線程是否被中斷;shutdownNow()使線程池狀態(tài)立即變成STOP狀態(tài),并試圖停止所有正在執(zhí)行的線程,線程池繼續(xù)執(zhí)行直到當前任務執(zhí)行完畢
boolean isShutdown()         #當前線程池是否已被關閉
boolean isTerminating()      #判斷當前線程池在shutdown()或shutdownNow()后處于正在中止但是尚未完全中止時,返回ture。
boolean isTerminated()       #判斷當前線程池在shutdown()或shutdownNow()后已完全中止時,返回ture。
boolean awaitTermination(long timeout, TimeUnit unit)  #在指定時間內查看線程池是否已終止工作;在線程池執(zhí)行shutdown()后,如果池中還有任務在被執(zhí)行則阻塞,否則將不再阻塞;與shutdown()結合可實現(xiàn)"等待執(zhí)行完畢"的效果。
boolean allowsCoreThreadTimeOut()                 #配置核心線程是否有超時效果
boolean allowsCoreThreadTimeOut(boolean value)    #配置核心線程是否有超時效果
boolean prestartCoreThread()    #每次初始化一個核心線程,直到達到corePoolSize時返回false
int prestartAllCoreThreads()    #初始化全部corePoolSize數(shù)量的核心線程,返回初始化的個數(shù)
long getCompletedTaskCount()    #返回已執(zhí)行完成的線程大概累積數(shù)量
void beforeExecute(Thread t, Runnable r)     #線程執(zhí)行前的操作
void afterExecute(Runnable r, Throwable t)   #線程執(zhí)行結束后的操作
boolean remove(Runnable task)   #刪除被execute()調用的尚未被執(zhí)行的Runnable任務,對submit()調用的線程需使用purge()
int getActiveCount()            #獲取正在執(zhí)行任務的線程數(shù)
long getTaskCount()             #獲取可被執(zhí)行的任務數(shù)

常見3種隊列

作用:作為線程池的緩沖,當新增線程超過maximumPoolSize時,會將新增線程暫時存放到該隊列中;

LinkedBlockingDeque:無邊界雙端隊列;

1>默認構造器由于該隊列大小沒有限制,執(zhí)行execute不會拋出異常,但是線程池同時運行線程數(shù)不會超過corePoolSize;此時maximumPoolSize和keepAliveTime無效,因為多于的線程會被放入LinkedBlockingQueue隊列中等待;

2>指定邊界大小時,maximumPoolSize+邊界大小<待執(zhí)行的任務時,多于的任務將執(zhí)行拒絕策略;

ArrayBlockingQueue:有邊界隊列;maximumPoolSize+邊界大小<待執(zhí)行的任務時,多余的任務將執(zhí)行拒絕策略;

SynchronousQueue:有序隊列;當執(zhí)行的線程大于maximumPoolSize時,多余線程將執(zhí)行拒絕策略。

4種拒絕策略

AbortPolicy:當任務添加到線程池被拒絕時,拋出RejectedExceutionExcetion異常,默認策略;

CallerRunsPolicy:當任務添加到線程池被拒絕時,會調用創(chuàng)建線程池的父線程來處理被拒絕任務;

DiscardOldestPolicy:當任務添加到線程池被拒絕時,線程池會丟棄等待隊列中最舊未處理任務,然后將被拒絕任務添加到等待隊列中;

DiscardPolicy:當任務添加到線程池被拒絕時,線程池會丟棄被拒絕任務;

到此這篇關于Java多線程中的ThreadPoolExecutor使用解析的文章就介紹到這了,更多相關Java的ThreadPoolExecutor內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 通過實例學習Either 樹和模式匹配

    通過實例學習Either 樹和模式匹配

    這篇文章主要介紹了通過實例學習Either 樹和模式匹配,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,,需要的朋友可以參考下
    2019-06-06
  • 解決@PathVariable參數(shù)接收不完整的問題

    解決@PathVariable參數(shù)接收不完整的問題

    這篇文章主要介紹了解決@PathVariable參數(shù)接收不完整的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • java 同步、異步、阻塞和非阻塞分析

    java 同步、異步、阻塞和非阻塞分析

    這篇文章主要介紹了java 同步、異步、阻塞和非阻塞分析的相關資料,需要的朋友可以參考下
    2017-02-02
  • java獲取properties屬性文件示例

    java獲取properties屬性文件示例

    Properties類表示了一個持久的屬性集。Properties可保存在流中或從流中加載。屬性列表中每個鍵及其對應值都是一個字符串。本文使用java讀取這些屬性,看下面詳細介紹吧
    2014-01-01
  • JAVA 運算符歸納總結

    JAVA 運算符歸納總結

    這篇文章主要對Java語法基礎之運算符進行了詳細的歸納總結,需要的朋友可以參考
    2017-04-04
  • SpringBoot中解決跨域的多種實現(xiàn)方式

    SpringBoot中解決跨域的多種實現(xiàn)方式

    這篇文章主要介紹了SpringBoot中解決跨域的多種實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • java 中String.equals和==的比較

    java 中String.equals和==的比較

    這篇文章主要介紹了java 中String.equals和==的比較的相關資料,需要的朋友可以參考下
    2017-08-08
  • spring使用WebSocket注入service層失敗問題及解決

    spring使用WebSocket注入service層失敗問題及解決

    這篇文章主要介紹了spring使用WebSocket注入service層失敗問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 使用Maven中的scope總結

    使用Maven中的scope總結

    這篇文章主要介紹了使用Maven中的scope總結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java中Stream流中map和forEach的區(qū)別詳解

    Java中Stream流中map和forEach的區(qū)別詳解

    本文主要介紹了Java中Stream流中map和forEach的區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-04-04

最新評論