一、corePoolSize 核心線程大小
線程池中最小的線程數量,即使處理空閑狀態,也不會被銷毀,除非設置了allowCoreThreadTimeOut。
CPU密集型:核心線程數 = CPU核數 + 1
IO密集型:核心線程數 = CPU核數 * 2+1
注:IO密集型(某大廠實踐經驗)
核心線程數 = CPU核數 / (1-阻塞系數)
例如阻塞系數 0.8,CPU核數為4,則核心線程數為20
二、maximumPoolSize 線程池最大線程數量
一個任務被提交后,首先會被緩存到工作隊列中,等工作隊列滿了,則會創建一個新線程,處理從工作隊列中的取出一個任務。
三、keepAliveTime 空閑線程存活時間
當線程數量大於corePoolSize時,一個處於空閑狀態的線程,在指定的時間后會被銷毀。
四、unit 空間線程存活時間單位
keepAliveTime的計量單位
五、workQueue 工作隊列,jdk中提供了四種工作隊列
新任務被提交后,會先進入到此工作隊列中,任務調度時再從隊列中取出任務。
①ArrayBlockingQueue
基於數組的有界阻塞隊列,按FIFO排序。
②LinkedBlockingQuene
基於鏈表的無界阻塞隊列(其實最大容量為Interger.MAX),按照FIFO排序。
④PriorityBlockingQueue
具有優先級的無界阻塞隊列,優先級通過參數Comparator實現。
六、threadFactory 線程工廠
創建一個新線程時使用的工廠,可以用來設定線程名、是否為daemon線程等等
七、handler 拒絕策略
當工作隊列中的任務已滿並且線程池中的線程數量也達到最大,這時如果有新任務提交進來,拒絕策略就是解決這個問題的,jdk中提供了4中拒絕策略:
①CallerRunsPolicy
該策略下,在調用者線程中直接執行被拒絕任務的run方法,除非線程池已經shutdown,則直接拋棄任務。
②AbortPolicy
該策略下,直接丟棄任務,並拋出RejectedExecutionException異常。
③DiscardPolicy
該策略下,直接丟棄任務,什么都不做。
④DiscardOldestPolicy
該策略下,拋棄最早進入隊列的那個任務,然后嘗試把這次拒絕的任務放入隊列。