1. 程式人生 > >Java - 執行緒池引數

Java - 執行緒池引數

ThreadPoolExecutor

ThreadPoolExecutor是執行緒池的真正實現,他通過構造方法的一系列引數(不同的構造方法),來構成不同配置的執行緒池。

 

構造方法引數

  • corePoolSize

    核心執行緒數,預設情況下核心執行緒會一直存活,即使處於閒置狀態也不會受存keepAliveTime限制。除非將allowCoreThreadTimeOut設定為true。有任務來之後,就會建立一個執行緒去執行任務,當執行緒池中的執行緒數目達到corePoolSize後,就會把到達的任務放到快取隊列當中,任務佇列也滿了,就看maximumPoolSize了

  • maximumPoolSize

    執行緒池所能容納的最大執行緒數。超過這個數的執行緒將被阻塞。當任務佇列為沒有設定大小的LinkedBlockingDeque時,這個值無效。

  • keepAliveTime

    執行緒空閒時間達到keepAliveTime時,執行緒會退出,直到執行緒數量=corePoolSize;如果引數allowCoreThreadTimeout=true,則會直到執行緒數量=0;

  • unit

    keepAliveTime的單位。

  • workQueue

    執行緒池中的任務佇列.

    常用的有SynchronousQueue,LinkedBlockingDeque

    ,ArrayBlockingQueue

  • threadFactory

    執行緒工廠,建立執行緒的

  • RejectedExecutionHandler

   拒絕策略,是一個介面,可以自己實現自定義的拒絕策略。

  •   兩種情況會拒絕處理任務:

               當執行緒數已經達到maxPoolSize,切佇列已滿,會拒絕新任務

             當執行緒池被呼叫shutdown()後,會等待執行緒池裡的任務執行完畢,再shutdown。如果在呼叫shutdown()和執行緒池真正shutdown之間提交任務,會拒絕新任務。

  •   具體策略(可自定義):

            - AbortPolicy 丟棄任務,拋執行時異常(預設)

            - CallerRunsPolicy 執行任務

            - DiscardPolicy 忽視,什麼都不會發生

            - DiscardOldestPolicy 從佇列中踢出最先進入佇列(佇列最前面)的任務