線程池構造函數參數有哪些
- 核心線程池
- 最大線程數
- 空閒非核心線程存活時長
- 空閒非核心線程存活時長單位
- 阻塞隊列
- 線程生產工廠
- 拒絕執行處理類
execute和submit有什麼區別?
- execute會拋出異常
- submit不會拋出異常
線程池怎麼處理異常
- 方式一:繼承線程池,重寫execute/submit,並使用try catch處理異常
- 方式二:重寫線程生產工廠,給每個生產的線程類設置UncaughtExceptionHandler
如果想要在執行過程中把ThreadLocal參數進行傳遞,該怎麼操作?
- 繼承線程池類
- 重寫submit方法
- 在submit的時候將ThreadLocal/MDC參數,提取並放到Runnable的私有屬性中
- 在Runnable中的run方法執行的時候,將私有屬性中的ThreadLocal參數或者MDC參數放到當前線程的ThreadLocal或者MDC中
- run方法執行結束後,需要把當前線程中ThreadLocal參數或者MDC參數清空
線程池的執行過程
- 當有任務提交的時候,檢查覈心線程是否滿了
- 沒滿,啓動新的線程進行執行
- 滿了,則將任務放到阻塞隊列中去
- 當阻塞隊列滿了,檢查線程數是否已經到達最大線程數
- 沒到達最大線程數,啓動新的線程處理任務
- 滿了,調用拒絕執行處理類進行處理
線程池
- 類:ThreadPoolExecutor