日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

java之线程池面试题

發(fā)布時(shí)間:2025/7/14 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java之线程池面试题 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

面試官:線程池有哪些?分別的作用是什么?

常用的線程池有:

  • newSingleThreadExecutor
  • newFixedThreadExecutor
  • newCacheThreadExecutor
  • newScheduleThreadExecutor
  • 1、newSingleThreadExecutor:

      單個(gè)線程的線程池,即線程池中每次只有一個(gè)線程工作,單線程串行執(zhí)行任務(wù);

    2、newFixedThreadExecutor:

      固定數(shù)量的線程池,每提交一個(gè)任務(wù)就是一個(gè)線程,直到線程達(dá)到線程池的最大數(shù)量,然后后面進(jìn)入等待隊(duì)列直到前面的任務(wù)才繼續(xù)執(zhí)行;

    3、newCacheThreadExecutor:

      可緩存線程池,當(dāng)線程池大小超過(guò)了處理任務(wù)所需的線程,那么就會(huì)回收部分空閑(一般 是60秒無(wú)執(zhí)行)的線程,當(dāng)有任務(wù)時(shí),會(huì)添加新線程來(lái)執(zhí)行;

    4、newScheduleThreadExecutor:

      大小無(wú)限制的 線程池,支持定時(shí)和周期性的執(zhí)行線程。

    ?

    ThreadPoolExecutor解說(shuō):

    ThreadPoolExecutor是上面幾個(gè)線程池底層的實(shí)現(xiàn),封裝了一層線程類worker,在運(yùn)行的時(shí)候執(zhí)行完自己的線程后主動(dòng)去隊(duì)列中取下一條線程去執(zhí)行。

    其中完整的構(gòu)造方法是:

    public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler) {if (corePoolSize < 0 ||maximumPoolSize <= 0 ||maximumPoolSize < corePoolSize ||keepAliveTime < 0)throw new IllegalArgumentException();if (workQueue == null || threadFactory == null || handler == null)throw new NullPointerException();this.corePoolSize = corePoolSize;this.maximumPoolSize = maximumPoolSize;this.workQueue = workQueue;this.keepAliveTime = unit.toNanos(keepAliveTime);this.threadFactory = threadFactory;this.handler = handler;}
    • corePoolSize:線程池中所保存的線程數(shù),包括空閑線程;
    • maximumPoolSize:線程池中允許的最大線程數(shù);
    • keepAliveTime:線程存活時(shí)間,當(dāng)超過(guò)keepAliveTime的時(shí)候后還無(wú)法獲取新的任務(wù),則返回null;
    • unit:keepAliveTime參數(shù)的時(shí)間單位;
    • workQueue:執(zhí)行前用于保持任務(wù)的隊(duì)列,此隊(duì)列僅保持由execute方法提交的Runnable任務(wù);
    • threadFactory:執(zhí)行程序創(chuàng)建新線程時(shí)使用的工廠;
    • handler:由于超出線程范圍和隊(duì)列容量而使用執(zhí)行被阻塞時(shí)所使用的處理策略;

      拒絕策略RejectedExecutionHandler有哪些,分別有什么作用:

  • AbortPolicy:該策略是線程池默認(rèn)策略;如果線程池隊(duì)列滿了丟掉這個(gè)任務(wù)并且拋出RejectedExecutionException異常。
  • DiscardPolicy:如果線程池隊(duì)列滿了,會(huì)直接丟掉這個(gè)任務(wù)并且不會(huì)有任何異常。
  • DiscarOldestPolicy:如果隊(duì)列滿了,會(huì)將最早進(jìn)入隊(duì)列的任務(wù)刪掉騰出空間,再嘗試加入隊(duì)列。
  • CallRunsPolicy:如果添加到線程池失敗,那么主線程會(huì)自己取執(zhí)行該任務(wù),不會(huì)等待線程池的線程取執(zhí)行。
  • 自定義策略
  • 轉(zhuǎn)載于:https://www.cnblogs.com/hujinshui/p/9961225.html

    總結(jié)

    以上是生活随笔為你收集整理的java之线程池面试题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。