ThreadPoolExecutor參數與拒絕策略


 

ThreadPoolExecutor參數的含義  https://www.jianshu.com/p/0e228dc30793 

資料

  1. **** 線程池之ThreadPoolExecutor使用 https://www.jianshu.com/p/f030aa5d7a28

  2.**** 線程池拒絕策略及有界無界隊列 https://www.jianshu.com/p/80b14c4c1ff4
線程池類為 java.util.concurrent.ThreadPoolExecutor,常用構造方法為:
  ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, RejectedExecutionHandler handler)

  • corePoolSize: 核心線程池大小
  • maximumPoolSize: 最大線程池大小
  • keepAliveTime: 線程最大空閑時間

    //當線程池中的線程數量大於 corePoolSize 時,如果某線程空閑時間超過 keepAliveTime ,線程將被終止。
    這樣,線程池可以動態的調整池中的線程數。

  • unit: 線程池維護線程所允許的空閑時間的單位

    unit可選的參數為java.util.concurrent.TimeUnit中的幾個靜態屬性:
    NANOSECONDS、MICROSECONDS、MILLISECONDS、SECONDS。納秒、微秒、毫秒、秒

  • workQueue: 線程池使用的緩沖隊列

    ThreadPoolExecutor線程池的API文檔中,一共推薦了三種等待隊列,
    它們是:SynchronousQueue、LinkedBlockingQueue和ArrayBlockingQueue;
        同步隊列 鏈接阻塞隊列 數組阻塞隊列

  • threadFactory: ThreadFactory 線程工廠,用於創建線程
  • handler: 線程池的拒絕策略

問題
1.拒絕策略什么時候使用
  核心線程 corePoolSize 、任務隊列 workQueue 、最大線程 maximumPoolSize ,如果三者都滿了,使用
  handler處理被拒絕的任務。
    handler有四個選擇:
      ThreadPoolExecutor.AbortPolicy()
        拋出java.util.concurrent.RejectedExecutionException異常
      ThreadPoolExecutor.CallerRunsPolicy()
        重試添加當前的任務,他會自動重復調用execute()方法
      ThreadPoolExecutor.DiscardOldestPolicy()
        拋棄舊的任務
      ThreadPoolExecutor.DiscardPolicy()
        拋棄當前的任務


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM