日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

程序員必會之最詳細的ThreadPoolExecutor 線程池七大參數(shù)含義

線程池的 7 大參數(shù)整理。

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

corePoolSize 線程池中長期存活的線程數(shù)

ThreadPoolExecutor 在創(chuàng)建之初,是不會立即初始化corePoolSize數(shù)量的Thread的,而是通過外部request來一個一個的創(chuàng)建,當達到corePoolSize數(shù)目之后,就會維持至少corePoolSize數(shù)目的Thread在pool中,哪怕他們都處于空閑狀態(tài)(idle)。corePoolSize >= 0。

maximumPoolSize 線程池中的最大線程數(shù)量

maximumPoolSize >= corePoolSize,maximumPoolSize>0

  • 若當前線程池中線程數(shù) < corePoolSize,則每來一個任務(wù)就創(chuàng)建一個線程去執(zhí)行。
  • 若當前線程池中線程數(shù) >= corePoolSize,會嘗試將任務(wù)添加到任務(wù)隊列。如果添加成功,則任務(wù)會等待空閑線程將其取出并執(zhí)行(針對的是有界隊列)。
  • 若隊列已滿,且當前線程池中線程數(shù) < maximumPoolSize,創(chuàng)建新的線程。
  • 若當前線程池中線程數(shù) >= maximumPoolSize,則會采用拒絕策略。

keepAliveTime 空閑線程存活時間

當線程池線程數(shù)量超過corePoolSize時,多余的空閑線程會在多長時間內(nèi)被銷毀。

銷毀的線程數(shù)=maximumPoolSize(最大線程數(shù))-corePoolSize(核心線程數(shù))。

TimeUnit 時間單位

空閑線程存活時間的描述單位,有以下選項:

  • TimeUnit.DAYS:天
  • TimeUnit.HOURS:小時
  • TimeUnit.MINUTES:分
  • TimeUnit.SECONDS:秒
  • TimeUnit.MILLISECONDS:毫秒
  • TimeUnit.MICROSECONDS:微妙
  • TimeUnit.NANOSECONDS:納秒

BlockingQueue

提交但未執(zhí)行的任務(wù)隊列,有以下選項:

  • LinkedBlockingQueue:用鏈表實現(xiàn)的隊列,可以是有界的,也可以是無界的,但在Executors中默認使用無界的。當有新的任務(wù)來到時,若系統(tǒng)的線程數(shù)小于corePoolSize,線程池會創(chuàng)建新的線程執(zhí)行任務(wù), 當系統(tǒng)的線程數(shù)量等于corePoolSize后,因為是無界的任務(wù)隊列,總是能成功將任務(wù)添加到任務(wù)隊列中,所以線程數(shù)量不再增加。若任務(wù)創(chuàng)建的速度遠大于任務(wù)處理的速度,無界隊列會快速增長,直到內(nèi)存耗盡。
  • SynchronousQueue:一個不存儲元素的阻塞隊列,SynchronousQueue沒有容量,所以實際上提交的任務(wù)不會被添加到任務(wù)隊列,總是將新任務(wù)提交給線程執(zhí)行,如果沒有空閑的線程,則嘗試創(chuàng)建新的線程,如果線程數(shù)量已經(jīng)達到最大值(maximumPoolSize),則執(zhí)行拒絕策略。
  • ArrayBlockingQueue:一個由數(shù)組結(jié)構(gòu)組成的有界阻塞隊列。
  • PriorityBlockingQueue:一個支持優(yōu)先級排序的無界阻塞隊列。
  • DelayQueue:一個使用優(yōu)先級隊列實現(xiàn)的無界阻塞隊列,只有在延遲期滿時才能從中提取元素。
  • LinkedTransferQueue:一個由鏈表結(jié)構(gòu)組成的無界阻塞隊列。與SynchronousQueue類似,還含有非阻塞方法。
  • LinkedBlockingDeque:一個由鏈表結(jié)構(gòu)組成的雙向阻塞隊列。

ThreadFactory 創(chuàng)建線程的工廠

線程池創(chuàng)建線程時調(diào)用的工廠方法,通過此方法可以設(shè)置線程的優(yōu)先級、線程命名規(guī)則以及線程類型(用戶線程還是守護線程)等。一般情況下使用默認的,即Executors類的靜態(tài)方法defaultThreadFactory(),也可以自定義。

import JAVA.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class Test {
    public static void mAIn(String[] args) {
        // 創(chuàng)建線程工廠
        ThreadFactory threadFactory = new ThreadFactory() {
            @Override
            public Thread newThread(Runnable runnable) {
                // 創(chuàng)建線程池中的線程
                Thread thread = new Thread(runnable);
                // 設(shè)置線程名稱
                thread.setName("Thread-" + runnable.hashCode());
                // 設(shè)置線程優(yōu)先級(最大值:10)
                thread.setPriority(Thread.MAX_PRIORITY);
                //......
                return thread;
            }
        };
        // 創(chuàng)建線程池
        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
                5,
                10,
                0L,
                TimeUnit.MILLISECONDS,
                new LinkedBlockingQueue<Runnable>(10),
                threadFactory
        );
        try{
            threadPoolExecutor.submit(new Runnable() {
                @Override
                public void run() {
                    Thread thread = Thread.currentThread();
                    System.out.println(String.format("線程:%s,線程優(yōu)先級:%d",thread.getName(), thread.getPriority()));
                }
            });
        }catch (Exception e) {
        } finally {
            threadPoolExecutor.shutdown();
        }
    }
}

程序員必會之最詳細的ThreadPoolExecutor 線程池七大參數(shù)含義

Executors.defaultThreadFactory()

RejectedExecutionHandler

拒絕策略。當線程池的任務(wù)超出線程池隊列可以存儲的最大值之后,執(zhí)行的策略。

  • AbortPolicy策略:直接拋出異常,阻止系統(tǒng)正常工作。(線程池的默認策略)。
  • DiscardOldestPolicy策略:丟棄任務(wù)隊列中最早添加的任務(wù),并嘗試提交當前任務(wù)。
  • CallerRunsPolicy策略:調(diào)用主線程執(zhí)行被拒絕的任務(wù),這提供了一種簡單的反饋控制機制,將降低新任務(wù)的提交速度。
  • DiscardPolicy策略:忽略并拋棄當前任務(wù)。

程序員必會之最詳細的ThreadPoolExecutor 線程池七大參數(shù)含義

new一個線程池

分享到:
標簽:線程
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定