1、線程池的建立 數組
咱們能夠經過ThreadPoolExecutor來建立一個線程池。 緩存
new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, milliseconds,runnableTaskQueue, handler);
建立一個線程池須要輸入幾個參數: spa
2、Executors提供了一些方便建立ThreadPoolExecutor的經常使用方法,主要有如下幾個: 線程
一、 Executors.newFixedThreadPool(int nThreads);建立固定大小(nThreads,大小不能超過int的最大值)的線程池 rest
//線程數量 日誌
int nThreads = 20; code
//建立executor 服務 對象
ExecutorService executor = Executors.newFixedThreadPool(nThreads) ; 排序
重載後的版本,須要多傳入實現了ThreadFactory接口的對象。 接口
ExecutorService executor = Executors. newFixedThreadPool(nThreads,threadFactory);
說明:建立固定大小(nThreads,大小不能超過int的最大值)的線程池,緩衝任務的隊列爲LinkedBlockingQueue,大小爲整型的最大數,當使用此線程池時,在同執行的任務數量超過傳入的線程池大小值後,將會放入LinkedBlockingQueue,在LinkedBlockingQueue中的任務須要等待線程空閒後再執行,若是放入LinkedBlockingQueue中的任務超過整型的最大數時,拋出RejectedExecutionException。
二、Executors.newSingleThreadExecutor():建立大小爲1的固定線程池。
ExecutorService executor = Executors.newSingleThreadExecutor();
重載後的版本,須要多傳入實現了ThreadFactory接口的對象。
ExecutorService executor = Executors. newSingleThreadScheduledExecutor(ThreadFactory threadFactory)
說明:建立大小爲1的固定線程池,同時執行任務(task)的只有一個,其它的(任務)task都放在LinkedBlockingQueue中排隊等待執行。
三、Executors.newCachedThreadPool();建立corePoolSize爲0,最大線程數爲整型的最大數,線程keepAliveTime爲1分鐘,緩存任務的隊列爲SynchronousQueue的線程池。
ExecutorService executor = Executors.newCachedThreadPool();
固然也能夠如下面的方式建立,重載後的版本,須要多傳入實現了ThreadFactory接口的對象。
ExecutorService executor = Executors.newCachedThreadPool(ThreadFactory threadFactory) ;
說明:使用時,放入線程池的task任務會複用線程或啓動新線程來執行,注意事項:啓動的線程數若是超過整型最大值後會拋出RejectedExecutionException異常,啓動後的線程存活時間爲一分鐘。
四、Executors.newScheduledThreadPool(int corePoolSize):建立corePoolSize大小的線程池。
//線程數量
int corePoolSize= 20;
//建立executor 服務
ExecutorService executor = Executors.newScheduledThreadPool(corePoolSize) ;
重載後的版本,須要多傳入實現了ThreadFactory接口的對象。
ExecutorService executor = Executors.newScheduledThreadPool(corePoolSize, threadFactory) ;
說明:線程keepAliveTime爲0,緩存任務的隊列爲DelayedWorkQueue,注意不要超過整型的最大值。