1. 程式人生 > >java執行緒池技術總結

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);
}

通過執行緒工廠可以對執行緒的一些屬性進行定製。