Java幾種執行緒池及任務佇列
Java幾種執行緒池及任務佇列
JDK提供了一套Executor框架,該框架提供了多種型別的執行緒池,主要的有一下工廠方法:
//該方法返回一個固定執行緒數量的執行緒池。該執行緒池中的執行緒數量始終不變。
public static ExecutorService newFixedThreadPool(int nThreads)
//該方法返回一個只有一個執行緒的執行緒池。
public static ExecutorService newSingleThreadExecutor()
//該方法返回一個可根據實際情況調整執行緒數量的執行緒池。若所有執行緒均在工作,
//又有新任務提交,則會建立新的執行緒處理任務。
public static ExecutorService newCachedThreadPool()
//ScheduledExecutorService介面在ExecutorService介面上
//擴充套件了在給定時間執行某任務的功能。
public static ScheduledExecutorService newSingleThreadScheduleExecutor()
public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize)
ScheduledExecutorService主要的方法如下:
//該方法會在給定的時間,對任務進行一次排程。下面兩個方法則是會週期性排程。
public ScheduledFuture<?> schedule(Runnable command,
long delay,
TimeUnit unit);
//該方法是在上個任務開始執行時為起點在period時間後排程下一次任務。
public ScheduledFuture<?> scheduleAtFixedRate(Runnable command,
long initialDelay,
long period,
TimeUnit unit);
//該方法是在上個任務結束後,再經過delay時間進行任務排程。
public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command,
long initialDelay,
long delay,
TimeUnit unit);
核心執行緒池的內部實現
public static ExecutorService newFixedThreadPool(int nThreads) {
return new ThreadPoolExecutor(nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
}
public static ExecutorService newSingleThreadExecutor() {
return new FinalizableDelegatedExecutorService
(new ThreadPoolExecutor(1, 1,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>()));
}
public static ExecutorService newCachedThreadPool() {
return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
60L, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>());
}
從上面程式碼可知,這三種執行緒池都只是對ThreadPoolExecutor類的封裝。ThreadPoolExecutor類的建構函式如下:
public ThreadPoolExecutor(int corePoolSize, //指定了執行緒池中的執行緒數量
int maximumPoolSize, //指定了執行緒池中的最大執行緒數量
long keepAliveTime, //當執行緒池執行緒數兩超過corePoolSize時,多餘的空閒執行緒的存活時間
TimeUnit unit, //keepAliveTime單位
BlockingQueue<Runnable> workQueue, //任務佇列
ThreadFactory threadFactory, //執行緒工廠
RejectedExecutionHandler handler) //拒絕策略
相關文章
- iOS-佇列.執行緒.任務iOS佇列執行緒
- java執行緒池-工作佇列workQueueJava執行緒佇列
- java多執行緒:執行緒池原理、阻塞佇列Java執行緒佇列
- Java提供的幾種執行緒池Java執行緒
- 執行緒池的五種狀態及建立執行緒池的幾種方式執行緒
- 執行緒池監控2-監控執行緒池狀態、執行緒數量和佇列任務數量等執行緒佇列
- java-執行緒池佇列飽和策略Java執行緒佇列
- java--執行緒池--建立執行緒池的幾種方式與執行緒池操作詳解Java執行緒
- 任務與佇列 iOS之多執行緒GCD(一)佇列iOS執行緒GC
- 執行緒池與工作佇列(轉)執行緒佇列
- 原始碼剖析ThreadPoolExecutor執行緒池及阻塞佇列原始碼thread執行緒佇列
- 執行緒池的阻塞佇列的理解執行緒佇列
- 死磕 java執行緒系列之執行緒池深入解析——普通任務執行流程Java執行緒
- Spring 非同步執行緒池、排程任務執行緒池配置Spring非同步執行緒
- 執行緒池建立的幾種方式執行緒
- Python多執行緒非同步任務佇列(例項)Python執行緒非同步佇列
- java自帶執行緒池和佇列詳細講解Java執行緒佇列
- 深入分析3種執行緒池執行任務的邏輯方法執行緒
- 死磕 java執行緒系列之執行緒池深入解析——未來任務執行流程Java執行緒
- Java併發程式設計:4種執行緒池和緩衝佇列BlockingQueueJava程式設計執行緒佇列BloC
- Java執行緒池原理及分析Java執行緒
- java多執行緒:java佇列詳解Java執行緒佇列
- 探討阻塞佇列和執行緒池原始碼佇列執行緒原始碼
- Java執行緒池二:執行緒池原理Java執行緒
- Java非同步判斷執行緒池所有任務是否執行完成的方法Java非同步執行緒
- java 四種執行緒池的使用Java執行緒
- Java四種執行緒池的使用Java執行緒
- Springboot非同步任務執行緒池Spring Boot非同步執行緒
- 詳解執行緒池的作用及Java中如何使用執行緒池執行緒Java
- java建立執行緒池的幾中方式Java執行緒
- Java中命名執行器服務執行緒和執行緒池Java執行緒
- 執行緒池以及四種常見執行緒池執行緒
- 淺談執行緒池(上):執行緒池的作用及CLR執行緒池執行緒
- Spring Boot使用執行緒池處理事務任務Spring Boot執行緒
- Java執行緒池原始碼及原理Java執行緒原始碼
- JAVA執行緒池的原理及使用Java執行緒
- Java多執行緒——執行緒池Java執行緒
- Python 30 行程式碼實現小型多執行緒任務佇列Python行程執行緒佇列