1. 程式人生 > >java 多執行緒,執行緒池

java 多執行緒,執行緒池

  1. 如果執行緒數量<=核心執行緒數量,那麼直接啟動一個核心執行緒來執行任務,不會放入佇列中。
  2. 如果執行緒數量>核心執行緒數,但<=最大執行緒數,並且任務佇列是LinkedBlockingDeque的時候,超過核心執行緒數量的任務會放在任務佇列中排隊。
  3. 如果執行緒數量>核心執行緒數,但<=最大執行緒數,並且任務佇列是SynchronousQueue的時候,執行緒池會建立新執行緒執行任務,這些任務也不會被放在任務佇列中。這些執行緒屬於非核心執行緒,在任務完成後,閒置時間達到了超時時間就會被清除。
  4. 如果執行緒數量>核心執行緒數,並且>最大執行緒數,當任務佇列是LinkedBlockingDeque,會將超過核心執行緒的任務放在任務佇列中排隊。也就是當任務佇列是LinkedBlockingDeque並且沒有大小限制時,執行緒池的最大執行緒數設定是無效的,他的執行緒數最多不會超過核心執行緒數。
  5. 如果執行緒數量>核心執行緒數,並且>最大執行緒數,當任務佇列是SynchronousQueue的時候,會因為執行緒池拒絕新增任務而丟擲異常。