————————————1.線程池的重要參數(shù)————————————
1.corePoolSize(核心線程數(shù))
--核心線程會(huì)一直執(zhí)行,即使沒有任務(wù)執(zhí)行
--當(dāng)線程數(shù)小于核心線程數(shù),有新任務(wù)執(zhí)行時(shí)線程池會(huì)優(yōu)先創(chuàng)建新線程(即使有空閑線程也不用)
--設(shè)置allowCoreThreadTimeout=true(默認(rèn)false)時(shí),核心線程會(huì)超時(shí)關(guān)閉
2.BlockingQueue<Runnable>:阻塞隊(duì)列,存儲(chǔ)等待執(zhí)行的任務(wù)。參數(shù)有ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue可選。
--當(dāng)核心線程數(shù)達(dá)到最大時(shí),新的任務(wù)會(huì)放入等待隊(duì)列中排隊(duì)執(zhí)行
3.maxPoolSize(最大線程數(shù))
--當(dāng)前線程數(shù)>=核心線程數(shù)且任務(wù)隊(duì)列已滿,就會(huì)創(chuàng)建新的線程
--當(dāng)前線程數(shù)=最大線程數(shù),且任務(wù)隊(duì)列已滿,線程池會(huì)拒絕處理任務(wù)拋出異常
4.keepAliveTime(線程空閑時(shí)間)
5.TimeUnit:空閑線程的保留時(shí)間單位。
--當(dāng)線程空閑時(shí)間=keepAliveTime時(shí),線程會(huì)關(guān)閉 知道=核心線程數(shù)時(shí)停止
--allowCoreThreadTimeout=true時(shí),核心線程也會(huì)關(guān)閉
6.ThreadFactory線程工廠,用來創(chuàng)建線程
7.rejectedExecutionHandler(任務(wù)拒絕處理器)
當(dāng)線程數(shù)已經(jīng)達(dá)到maxPoolSize,切隊(duì)列已滿,會(huì)拒絕新任務(wù)
RejectedExecutionHandler:隊(duì)列已滿,而且任務(wù)量大于最大線程的異常處理策略
——————————————線程池的種類————————————————
1.newCachedThreadPool(創(chuàng)建一個(gè)可緩存線程池程
適用:執(zhí)行很多短期異步的小程序或者負(fù)載較輕的服務(wù)器)
2.newFixedThreadPool(創(chuàng)建一個(gè)定長線程池,執(zhí)行長期的任務(wù),性能好很多)
3.newSingleThreadExecutor(創(chuàng)建一個(gè)定長線程池,一個(gè)任務(wù)一個(gè)任務(wù)執(zhí)行的場景)
4.NewScheduledThreadPool(創(chuàng)建一個(gè)單線程化的線程池,周期性執(zhí)行任務(wù)的場景)
————————進(jìn)程和線程的區(qū)別————————
進(jìn)程是資源(CPU,內(nèi)存)分配的基本單位,他是程序執(zhí)行的一個(gè)實(shí)例。
程序運(yùn)行時(shí)系統(tǒng)會(huì)創(chuàng)建一個(gè)進(jìn)程,為它分配資源,將它放入就緒隊(duì)列,等待進(jìn)程調(diào)度器調(diào)度,當(dāng)選中它時(shí)為它分配CPU資源,程序開始正真的運(yùn)行。
線程是程序執(zhí)行的最小單位,它是進(jìn)程的一個(gè)執(zhí)行流,一個(gè)進(jìn)程可以有多個(gè)線程組成,線程間共享進(jìn)程的所有資源,每個(gè)線程都有自己的局部變量和堆棧,它們被CPU獨(dú)立調(diào)度執(zhí)行,支持多并發(fā),每個(gè)請求分配一個(gè)線程執(zhí)行。
區(qū)別:
1.進(jìn)程是資源分配的最小單位,線程是程序執(zhí)行的最小單位
2.進(jìn)程有自己的獨(dú)立地址空間,每啟動(dòng)一個(gè)進(jìn)程,系統(tǒng)就會(huì)為它分配地址空間,建立數(shù)據(jù)段來維護(hù)代碼段,堆棧段和數(shù)據(jù)段,這種操作是非常昂貴的。所以進(jìn)程間切換是非常耗資源的。
線程是共享進(jìn)程中的數(shù)據(jù),使用相同的地址空間
3.線程之間的通信方便,同一進(jìn)程下的線程共享靜態(tài)資源和全局變量等數(shù)據(jù)
進(jìn)程間的通信需要通過(IPC)來實(shí)現(xiàn)
4.多進(jìn)程程序更健壯,多線程程序一個(gè)線程死掉,整個(gè)進(jìn)程就會(huì)死掉,多進(jìn)程一個(gè)進(jìn)程死掉不會(huì)影響其他的進(jìn)程,因?yàn)檫M(jìn)程都有自己的獨(dú)立空間
——————————2.線程同步的方式有哪些——————————
臨界區(qū),信號(hào)量,互斥對象,事件對象
——————————3.進(jìn)程的調(diào)度算法——————————————
1.先來先服務(wù)調(diào)度算法
2.短作業(yè)進(jìn)程優(yōu)先調(diào)度算法
3.優(yōu)先權(quán)調(diào)度算法
4.高響應(yīng)比優(yōu)先調(diào)度算法
雙重檢驗(yàn)鎖