線程 - 草稿

————————————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)鎖

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容