成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發(fā) 后端
ThreadPoolExecutor 在創(chuàng)建之初,是不會立即初始化CorePoolSize數(shù)量的Thread的,而是通過外部Request來一個(gè)一個(gè)的創(chuàng)建,當(dāng)達(dá)到CorePoolSize數(shù)目之后,就會維持至少CorePoolSize數(shù)目的Thread在pool中,哪怕他們都處于空閑狀態(tài)(idle)。

線程池的 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來一個(gè)一個(gè)的創(chuàng)建,當(dāng)達(dá)到corePoolSize數(shù)目之后,就會維持至少corePoolSize數(shù)目的Thread在pool中,哪怕他們都處于空閑狀態(tài)(idle)。corePoolSize >= 0。

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

maximumPoolSize >= corePoolSize,maximumPoolSize>0

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

keepAliveTime 空閑線程存活時(shí)間

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

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

TimeUnit 時(shí)間單位

空閑線程存活時(shí)間的描述單位,有以下選項(xiàng):

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

BlockingQueue

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

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

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

線程池創(chuàng)建線程時(shí)調(diào)用的工廠方法,通過此方法可以設(shè)置線程的優(yōu)先級、線程命名規(guī)則以及線程類型(用戶線程還是守護(hù)線程)等。一般情況下使用默認(rèn)的,即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();
        }
    }
}

Executors.defaultThreadFactory()

RejectedExecutionHandler

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

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

new一個(gè)線程池

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2010-12-23 15:45:31

程序員編程

2013-04-22 11:13:06

程序員編程誤區(qū)

2011-06-09 13:26:27

編程程序員

2014-11-07 16:57:21

程序員

2011-06-07 10:28:51

程序員

2019-11-27 18:43:36

程序員編程語言軟件

2013-07-09 15:04:17

程序員編程

2010-08-10 14:45:57

FlexBlazeDS

2009-02-24 09:28:29

2009-08-26 10:06:40

七夕程序員

2018-08-06 10:25:07

Linux命令程序員

2016-11-23 07:33:54

編程語言GitHub程序員

2020-11-25 10:40:58

程序員技能開發(fā)者

2009-08-31 16:28:35

程序開發(fā)語言

2022-03-09 07:35:24

線程池線程參數(shù)

2019-01-30 14:14:16

LinuxUNIX操作系統(tǒng)

2011-01-06 10:43:07

網(wǎng)絡(luò)管理員

2018-04-11 14:13:29

物聯(lián)網(wǎng)信息技術(shù)互聯(lián)網(wǎng)

2022-10-28 10:23:27

Java多線程底層

2023-09-12 11:25:15

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 午夜一区二区三区 | 国产精品一区二区欧美黑人喷潮水 | 91久久精品一区二区二区 | 国产91av视频 | 97视频精品 | 一级片在线视频 | 国产亚洲欧美在线视频 | 欧洲妇女成人淫片aaa视频 | 国产精品夜夜春夜夜爽久久电影 | 岛国av免费在线观看 | 91精品国产综合久久婷婷香蕉 | 在线观看www| 久久躁日日躁aaaaxxxx | 成人午夜免费福利视频 | 成人精品啪啪欧美成 | 嫩草研究影院 | 亚洲国产高清免费 | 中文字幕av一区 | 中文字字幕一区二区三区四区五区 | 亚洲精品永久免费 | 亚洲精品视频在线看 | 精品久久久久久久久久久 | 国产探花 | 喷潮网站 | 国产乱码精品1区2区3区 | 欧美亚州 | 国产一区二区视频免费在线观看 | 夜夜爽99久久国产综合精品女不卡 | 久久久久成人精品 | 国内精品久久久久久 | 在线观看亚洲 | 97人人澡人人爽91综合色 | 天天艹逼网 | 日韩欧美视频 | 亚洲手机视频在线 | 欧美国产中文 | 欧美性极品xxxx做受 | 日本午夜精品 | 一区二区中文字幕 | 国产综合av | 国产免费a视频 |