java之线程池面试题
生活随笔
收集整理的這篇文章主要介紹了
java之线程池面试题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
面試官:線程池有哪些?分別的作用是什么?
常用的線程池有:
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有哪些,分別有什么作用:
轉載于:https://www.cnblogs.com/hujinshui/p/9961225.html
總結
以上是生活随笔為你收集整理的java之线程池面试题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 104-string和StringBui
- 下一篇: Google 的 QUIC 华丽转身成为