<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Java創(chuàng)建線程池的方式

          共 2705字,需瀏覽 6分鐘

           ·

          2022-03-11 12:41

          一、創(chuàng)建線程池的方式一般有兩種:

          1. 通過(guò)Executors工廠方法創(chuàng)建

          2. 通過(guò)?newThreadPoolExecutor(intcorePoolSize,intmaximumPoolSize,longkeepAliveTime,TimeUnitunit,BlockingQueue<Runnable>workQueue,new?ThreadFactoryBuilder().setNameFormat("thread-name-%").build(),?newThreadPoolExecutor.AbortPolicy())

          二、通過(guò)Executors工廠創(chuàng)建

          1. Executors.newSingleThreadExecutor()

          這個(gè)線程池只有一個(gè)核心線程在工作,也就是相當(dāng)于單線程串行執(zhí)行所有任務(wù)。如果這個(gè)唯一的線程因?yàn)楫惓=Y(jié)束,那么會(huì)有一個(gè)新的線程來(lái)替代它。此線程池保證所有任務(wù)的執(zhí)行順序按照任務(wù)的提交順序執(zhí)行。

          1. publicstaticExecutorService newSingleThreadExecutor(){

          2. returnnewFinalizableDelegatedExecutorService

          3. (newThreadPoolExecutor(1,1,

          4. 0L,TimeUnit.MILLISECONDS,

          5. newLinkedBlockingQueue<Runnable>()));

          6. }

          • corePoolSize:1,只有一個(gè)核心線程在工作

          • maximumPoolSize:1

          • keepAliveTime:0L

          • TimeUnit:?TimeUnit.MILLISECONDS?時(shí)間單位是毫秒

          • workQueue:new LinkedBlockingQueue(),其緩沖隊(duì)列是無(wú)界的

          2. Executors.newFixedThreadPool(n)

          FixedThreadPool 是固定大小的線程池,只有核心線程。每次提交一個(gè)任務(wù)就創(chuàng)建一個(gè)線程,直到線程達(dá)到線程池的最大大小。線程池的大小一旦達(dá)到最大值就會(huì)保持不變,如果某個(gè)線程因?yàn)閳?zhí)行異常而結(jié)束,那么線程池會(huì)補(bǔ)充一個(gè)新線程。FixedThreadPool 多數(shù)針對(duì)一些很穩(wěn)定很固定的正規(guī)并發(fā)線程,多用于服務(wù)器。

          1. publicstaticExecutorService newFixedThreadPool(int nThreads){

          2. returnnewThreadPoolExecutor(nThreads, nThreads,

          3. 0L,TimeUnit.MILLISECONDS,

          4. newLinkedBlockingQueue<Runnable>());

          5. }

          • corePoolSize:nThreads

          • maximumPoolSize:nThreads

          • keepAliveTime:0L

          • TimeUnit:?TimeUnit.MILLISECONDS?時(shí)間單位是毫秒

          • workQueue:new LinkedBlockingQueue(),其緩沖隊(duì)列是無(wú)界的

          3. Executors.newCachedThreadPool()

          CachedThreadPool 是無(wú)界線程池,如果線程池的大小超過(guò)了處理任務(wù)所需要的線程,那么就會(huì)回收部分空閑(60 秒不執(zhí)行任務(wù))線程,當(dāng)任務(wù)數(shù)增加時(shí),此線程池又可以智能的添加新線程來(lái)處理任務(wù)。線程池大小完全依賴于操作系統(tǒng)(或者說(shuō) JVM)能夠創(chuàng)建的最大線程大小。SynchronousQueue 是一個(gè)是緩沖區(qū)為 1 的阻塞隊(duì)列。緩存型池子通常用于執(zhí)行一些生存期很短的異步型任務(wù),因此在一些面向連接的 daemon 型 SERVER 中用得不多。但對(duì)于生存期短的異步任務(wù),它是 Executor 的首選。

          1. publicstaticExecutorService newCachedThreadPool(){

          2. returnnewThreadPoolExecutor(0,Integer.MAX_VALUE,

          3. 60L,TimeUnit.SECONDS,

          4. newSynchronousQueue<Runnable>());

          5. }

          • corePoolSize:0

          • maximumPoolSize:Integer.MAX_VALUE

          • keepAliveTime:60L

          • TimeUnit:?TimeUnit.SECONDS時(shí)間單位是秒

          • workQueue:new SynchronousQueue(),一個(gè)是緩沖區(qū)為 1 的阻塞隊(duì)列。

          4. Executors.newScheduledThreadPool(n)

          ScheduledThreadPool核心線程池固定,大小無(wú)限的線程池。此線程池支持定時(shí)以及周期性執(zhí)行任務(wù)的需求。創(chuàng)建一個(gè)周期性執(zhí)行任務(wù)的線程池。如果閑置,非核心線程池會(huì)在 DEFAULT_KEEPALIVEMILLIS 時(shí)間內(nèi)回收。

          1. publicScheduledThreadPoolExecutor(int corePoolSize){

          2. super(corePoolSize,Integer.MAX_VALUE,0, NANOSECONDS,

          3. newDelayedWorkQueue());

          4. }

          • corePoolSize:corePoolSize

          • maximumPoolSize:Integer.MAX_VALUE

          • keepAliveTime:DEFAULTKEEPALIVEMILLIS

          • workQueue:new DelayedWorkQueue()

          三、通過(guò)new ThreadPoolExecutor(coreThreadSize, max... ...)

          具體的詳情請(qǐng)看之前的文章線程池的理解以及使用


          本文作者:Java技術(shù)債務(wù)
          原文鏈接:https://www.cuizb.top/myblog/article/1646793688
          版權(quán)聲明:?本博客所有文章除特別聲明外,均采用 CC BY 3.0 CN協(xié)議進(jìn)行許可。轉(zhuǎn)載請(qǐng)署名作者且注明文章出處。

          Java技術(shù)債務(wù)


          1140333905492948723ffbefe482fb78.webp

          JVM內(nèi)存泄漏和內(nèi)存溢出的原因
          JVM常用監(jiān)控工具解釋以及使用

          Redis 常見(jiàn)面試題(一)

          ClickHouse之MaterializeMySQL引擎(十)

          三種實(shí)現(xiàn)分布式鎖的實(shí)現(xiàn)與區(qū)別

          線程池的理解以及使用


          號(hào)外!號(hào)外!最近面試BAT,整理一份面試資料,覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫(kù)、數(shù)據(jù)結(jié)構(gòu)等等。想獲取嗎?如果你想提升自己,并且想和優(yōu)秀的人一起進(jìn)步,感興趣的朋友,可以在掃碼關(guān)注下方公眾號(hào)。資料在公眾號(hào)里靜靜的躺著呢。。。



          喜歡就分享
          認(rèn)同就點(diǎn)贊

          支持就在看

          一鍵四連,你的offer也四連3bdd8f73850e4943a8c131e0e6c6b8bd.webp

          瀏覽 36
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  3级片在线 | 国产福利激情 | 五月开心婷婷 | 依人在线大香蕉 | 日韩乱伦图片区 |