Java併發程式設計---Executors多工執行緒框架
阿新 • • 發佈:2019-01-28
一.概念
為了更好地控制多執行緒,JDK提供了一套執行緒框架Executor,幫助開發人員有效地進行執行緒控制.他們都在java.util.concurrent包中,是JDK併發包的核心.其中有一個比較重要的類Executors,他扮演這執行緒工廠的角色,我們通過Executors可以建立特定功能的執行緒池.
Executors建立執行緒池的方法:
newFixedThreadPool()方法,該方法返回一個固定數量的執行緒池,該方法的執行緒數始終不變,當有一個任務提交時,若執行緒池中空閒,則立即執行;若沒有,則會被暫緩在一個任務佇列中等待有空閒的執行緒去執行.
newSingleThreadExecutor()方法,建立一個執行緒的執行緒池,若空閒則執行,若沒有空閒執行緒則暫緩在任務佇列中
newCachedThreadPool()方法,返回一個可根據實際情況調整執行緒數量的執行緒池,不限制最大執行緒數量,若有任務,則建立執行緒;若無任務,則不建立執行緒.若果沒有任務,則執行緒在60s後自動回收(空閒時間60s)
newScheduledThreadPool()方法,該方法返回一個ScheduledExecutorService物件,但該執行緒池可以指定執行緒的數量
二.使用示例
package com.thread.executors; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * 多工執行緒框架 * @author lhy * @time 2017.01.05 * */ public class UseExecutors { public static void main(String[] args) { // TODO Auto-generated method stub ExecutorService pool = Executors.newFixedThreadPool(10); //定義固定的執行緒池數量 ExecutorService pool2 = Executors.newSingleThreadExecutor(); ExecutorService pool3 = Executors.newCachedThreadPool(); ExecutorService pool4 = Executors.newScheduledThreadPool(10); } }
2.1 newFixedThreadPool()方法JDK底層實現
public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()); }
2.2 newSingleThreadExecutor()方法JDK底層實現
public static ExecutorService newSingleThreadExecutor() {
return new FinalizableDelegatedExecutorService
(new ThreadPoolExecutor(1, 1,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>()));
}
2.3 newCachedThreadPool() 方法JDK底層實現
public static ExecutorService newCachedThreadPool() {
return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
60L, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>());
}
2.4 newScheduledThreadPool() 方法JDK底層實現
public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) {
return new ScheduledThreadPoolExecutor(corePoolSize);
}