java 線程池 學習記錄

線程池構造函數參數有哪些


  • 核心線程池
  • 最大線程數

  • 空閒非核心線程存活時長
  • 空閒非核心線程存活時長單位

  • 阻塞隊列

  • 線程生產工廠

  • 拒絕執行處理類

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章