1、基礎
(1)線程模型的分類
使用者線程(ULT)。使用者程式實作,不依賴作業系統核心,應用提供建立、同步、排程和管理線程的函數來控制使用者線程。不需要使用者态/核心态切換,速度快。核心對ULT無感覺,線程阻塞則程序〈包括它的所有線程)阻塞。
核心線程(KLT),系統核心管理線程(KLT),核心儲存線程的狀态和上下文資訊,線程阻塞不會引起程序阻塞。在多處理器系統上,多線程在多處理器上并行運作。線程的建立、排程和管理由核心完成,效率比ULT要慢,比程序操作快。
(2)java線程與核心線程的關系
jvm運用的是核心級線程模型,java線程與核心線程是一對一的關系

(2)Executor架構
2、線程池的五種狀态
(1)五種狀态
Running:能接受新任務以及處理已添加的任務
Shutdown:不接受新任務,可以處理已經添加的任務
Stop:不接受新任務,不處理已經添加的任務,并且中斷正在處理的任務
Tidying:所有的任務已經終止, ctl記錄的”任務數量”為0 ctl負責記錄線程池的運作狀态與活動線程數量
Terminated:線程池徹底終止,則線程池轉變為terminated狀态
(2)流程
(3)源碼(保證線程的安全,将線程池的所有狀态儲存到一個變量中)
Interger類型的變量的解析:
3、線程池工作原理
(1)五種建立方式
newCachedThreadPool:建立一個可緩存線程池,如果線程池長度超過處理需求可靈活回收空閑線程,若無可回收,則建立線程
newFixedThreadPool:建立一個定長線程池,可控制線程的最大并發數,超出的線程會線上程池中等待。
newScheduleThreadPool:建立一個定長線程池,支援定時及周期性任務處理
newSingleThreadScheduledExecutor:建立一個單線程化的線程池,他隻用唯一的工作棧來執行任務,一池一線程
newSingleThreadExecutor):串行執行所有任務。如果這個唯一的線程因為異常結束,那麼會有一個新的線程來替代它。此線程池保證所有任務的執行順序按照任務的送出順序執行。
直接使用Executors建立線程的話,線程的數量沒有上限,是以需要手動建立線程池
(2)源碼ThreadPoolExecutor
隊列滿,隻能進行出隊操作,所有入隊的操作必須等待,也就是被阻塞
隊列空,隻能進行入隊操作,所有出隊的操作必須等待,也就是被阻塞
流程:
4、execute方法
下面代碼的ctl是和下面代碼片段的ctl聯系的:
将線程池的所有狀态儲存到一個Integer類型的變量中去,保證線程的安全。
每個人都會有一段異常艱難的時光 。
生活的壓力 , 工作的失意 , 學業的壓力。
愛的惶惶不可終日。
挺過來的 ,人生就會豁然開朗。
挺不過來的 ,時間也會教你 ,怎麼與它們握手言和 ,是以不必害怕的。
——楊绛