在並發編程中,使用線程池的好處是減少在創建和銷毀線程上所花費的時間以及系統資源的開銷,解決資源不足的問題。如果不使用線程池,有可能造成系統創建大量線程而導致消耗完內存或者“過度切換”的問題。
JAVA線程池有幾個核心的參數,這幾個參數的作用是:
corePoolSize:核心線程數,當提交一個新的任務到線程池,如果當前線程池運行的線程數(包括閑置的線程)小於核心線程數,則會創建一個新的線程作為核心線程來執行該任務。注意:核心線程是不允許銷毀的,除非設置allowCoreThreadTimeOut(true)參數,這是一個非構造函數的參數。
maximumPoolSize:線程池允許最大的線程數,當提交一個新的任務到線程池,如果當前線程池運行的線程數(包括閑置的線程)大於corePoolSize,小於maximumPoolSize,並且等待隊列滿的時候,會創建一個新的線程來處理該任務。
keepAliveTime:當線程池中線程數量大於corePoolSize時,閑置線程最長可以存活的時間。
unit:時間單位。
workQueue:保存任務的隊列,當池中線程數大於corePoolSize時,新來的任務保存到該隊列。
threadFactory:線程工廠,線程池中的線程都是通過這個工廠創建的。
handler:任務拒絕執行策略,當線程池無法處理新來任務時的處理策略。
