Executor
Executor是Java中的概念,是一個接口,真正的線程池實現是ThreadPoolExecutor。
它提供了一系列的參數來配置不同的線程池。
ThreadPoolExecutor
ThreadPoolExecutor是線程池的真正實現,他的構造方法提供了一系列參數來配置線程池,
public ThreadPoolExecutor(
int corePoolSize,//核心線程數
int maximumPoolSize,//最大線程數
long keepAliveTime, //非核心線程的超時時間
TimeUnit unit,//單位
BlockingQueue<Runnable> workQueue,//任務隊列
ThreadFactory threadFactory//線程工廠
)
除了這些參數外還有個很不常用的參數RejectedExecutionHandler handler。
當線程池無法執行新任務時(任務隊列滿了或者無法成功執行)會調用handler的rejectExecutionException。
線程池的類別
在Executors裏面對應的線程池有一下幾種實現:
cached ThreadPool
緩存線程池的特點是它會緩存之前的線程,新提交的任務可以運行在緩存的線程中,即實現了前文所述的第一個優勢。
fixed ThreadPool
cachedThreadPool的一個特點是——新提交的任務沒有空閒線程可以執行了,就會創建一個新的線程。而fixedThreadPool不會這樣,它會將任務保存起來,等到有空閒線程再執行。即實現了前文所述的第二個優勢。
scheduled ThreadPool
scheduled ThreadPool的特點是可以實現任務的調度,比如任務的延遲執行和週期執行。
代碼實例
ThreadPoolExecutor executor1 = (ThreadPoolExecutor)Executors.newCachedThreadPool();
ThreadPoolExecutor executor2 = (ThreadPoolExecutor)Executors.newFixedThreadPool(4);