java執行緒池技術總結
1.Executor 執行緒池頂層介面,只有一個execute方法,void execute(Runnable command);
2.ExecutorService介面繼承於Executor介面
3.Executors 是操作Executor的工具類
Executors 能建立各種型別的執行緒池
1.Executors .newFixedThreadPool(fix) 建立固定執行緒池數量的執行緒池
2.Executors. newCachedThreadPool 建立無界執行緒池
3.Executors.newScheduledThreadPool(corePoolSize)建立指定時間之後執行的執行緒池,需要使用ScheduledExecutorService的schedule方法
4.Executors.newSingleThreadExecutor 建立單個執行緒的執行緒池
執行緒池原理分析:
Executors工廠類的newXXXThredExecutor()方法建立的執行緒都是通過例項化ThreadPoolExecutor實現的
ThreadPoolExecutor常用的構造方法:
public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit, BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler)
corePoolSize
核心執行緒數,預設情況下核心執行緒會一直存活,即使處於閒置狀態也不會受存keepAliveTime限制。除非將allowCoreThreadTimeOut設定為true。
maximumPoolSize
執行緒池所能容納的最大執行緒數。超過這個數的執行緒將被阻塞。當任務佇列為沒有設定大小的LinkedBlockingDeque時,這個值無效。(如果佇列裡面的值滿了,最大執行緒池數會再啟執行緒執行任務)
keepAliveTime
非核心執行緒的閒置超時時間,超過這個時間就會被回收。
unit
指定keepAliveTime的單位,如TimeUnit.SECONDS。當將allowCoreThreadTimeOut設定為true時對corePoolSize生效。
workQueue
執行緒池中的任務佇列.
常用的有三種佇列,SynchronousQueue(不放資料,一有任務立即執行),LinkedBlockingDeque(無限佇列。也可以構造有個數的佇列)
threadFactory
執行緒工廠,提供建立新執行緒的功能。ThreadFactory是一個介面,只有一個方法
public interface ThreadFactory {
Thread newThread(Runnable r);
}
通過執行緒工廠可以對執行緒的一些屬性進行定製。