自JDK1.5,Java吊炸天的并發包就提供線程池java.util.concurrent.ThreadPoolExecutor ,先來看看其各個字段的含義:
corePoolSize 核心線程數,指保留的線程池大小(不超過maximumPoolSize值時,線程池中最多有corePoolSize 個線程工作)。
maximumPoolSize 指的是線程池的最大大小(線程池中最大有corePoolSize 個線程可運行)。
keepAliveTime 指的是空閑線程結束的超時時間(當一個線程不工作時,過keepAliveTime 長時間將停止該線程)。
unit 是一個枚舉,表示 keepAliveTime 的單位(有NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS,7個可選值)。
workQueue 表示存放任務的隊列(存放需要被線程池執行的線程隊列)。 handler 拒絕策略(添加任務失敗后如何處理該任務).
關于corePoolSize、maxPoolSize、queueCapacity之間的關系: corePoolSize為初始線程個數,當corePoolSize的線程都在執行中時,則將Runnable臨時放入queueCapacity的緩沖隊列中等待,當queueCapacity滿了時,才會將線程個數從corePoolSize擴展至maxPoolSize,如果此時queueCapacity緩存隊列任然是滿的,則后續Runnable對象加入其中時就會被abort拋棄。
這位兄弟提供了很好的代碼說明例子,具體可參見:http://dmwdmc.iteye.com/blog/1882475。例子中有模擬整個線程池都滿了拋棄后面任務的場景。