java之线程池面试题
面試官:線程池有哪些?分別的作用是什么?
常用的線程池有:
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有哪些,分別有什么作用:
轉(zhuǎn)載于:https://www.cnblogs.com/hujinshui/p/9961225.html
總結(jié)
以上是生活随笔為你收集整理的java之线程池面试题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 104-string和StringBui
- 下一篇: Google 的 QUIC 华丽转身成为