學習一個技能點能夠從這幾方面去思考?java
一、線程池是什麼?緩存
二、爲何要使用線程池?使用它以後能夠帶來什麼好處?併發
三、怎麼用?高併發
四、底層原理是如何實現的?學習
第一個問題:說說你對線程池的理解?優化
線程池從字面意思去理解,一個池子裏面有一系列的線程,這些線程是事先建立好了的,拿來即用。spa
建立線程和銷燬線程是不便利的,高併發環境下頻繁的建立線程和銷燬線程會形成資源的浪費甚至致使系統崩潰,建立和銷燬線程是很是消耗資源的‘低效率。而線程池的出現恰好解決了這一問題,省略建立和銷燬這一過程,從而最優化使用系統資源。線程
因此使用線程池做用有兩點:一、提早將線程建立好——提升效率;二、提升系統資源利用率——避免系統奔潰;code
第二問題:如何建立線程池?blog
jdk提供4中建立線程池方式:
第一種:建立一個單線程化的線程池,它只會用惟一的工做線程來執行任務,保證全部任務都按照指定順序執行
第二種:建立一個定長線程池,可控制線程的最大併發數,超出的線程會在隊列中等待.
第三種:建立一個可緩存線程池,若是線程池長度超過處理須要,可靈活回收空閒線程,若無可回收,則建立新線程.
第四種:建立一個定長的線程池,支持定時週期性執行任務;
public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) { return new ScheduledThreadPoolExecutor(corePoolSize); }
第三個問題:底層原理是如何實現的?
第四個問題:說說線程池的幾個參數?