日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java之线程池面试题

發(fā)布時間:2025/7/14 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java之线程池面试题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

常用的線程池有:

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

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

    2、newFixedThreadExecutor:

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

    3、newCacheThreadExecutor:

      可緩存線程池,當線程池大小超過了處理任務所需的線程,那么就會回收部分空閑(一般 是60秒無執(zhí)行)的線程,當有任務時,會添加新線程來執(zhí)行;

    4、newScheduleThreadExecutor:

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

    ?

    ThreadPoolExecutor解說:

    ThreadPoolExecutor是上面幾個線程池底層的實現,封裝了一層線程類worker,在運行的時候執(zhí)行完自己的線程后主動去隊列中取下一條線程去執(zhí)行。

    其中完整的構造方法是:

    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:線程池中所保存的線程數,包括空閑線程;
    • maximumPoolSize:線程池中允許的最大線程數;
    • keepAliveTime:線程存活時間,當超過keepAliveTime的時候后還無法獲取新的任務,則返回null;
    • unit:keepAliveTime參數的時間單位;
    • workQueue:執(zhí)行前用于保持任務的隊列,此隊列僅保持由execute方法提交的Runnable任務;
    • threadFactory:執(zhí)行程序創(chuàng)建新線程時使用的工廠;
    • handler:由于超出線程范圍和隊列容量而使用執(zhí)行被阻塞時所使用的處理策略;

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

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

    總結

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

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。