最近看了一些源碼(jdk的concurrent包),看了一本書(《大型網站技術架構》),從中發現了一個非常有用的模型:生產者/消費者模型。模型如下圖:
public ThreadPoolExecutor(int corePoolSize, //線程池的大小,不調用預創建線程函數的話,剛開始線程池裏線程數爲0
int maximumPoolSize,//線程池可容大小
long keepAliveTime, //如果線程數大於corePoolSize則任務空閒時間超過keepAliveTime會讓線程中斷,來接收新的任務
TimeUnit unit, //時間的單位,時、分、秒等
BlockingQueue<Runnable> workQueue, //阻塞隊列,當任務數超過corePoolSize時,進入阻塞隊列等待
ThreadFactory threadFactory, //創建新線程的工廠類
RejectedExecutionHandler handler); //當執行阻塞時候用的
ExecutorService executorService = Executors.newCachedThreadPool(new ThreadFactory() {//
@Override
public Thread newThread(Runnable r) {
}
});
ExecutorService executorService = Executors.newSingleThreadExecutor(threadFactory); //只有一個線程的線程池,可以用來共享變量
ExecutorService executorService = Executors.newFixedThreadPool(coreThreadPool,threadFactory); //固定長度的線程池
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(coreThreadPool,threadFactory);//可用來定時操作的線程池