java SE5的java.util.concurrent包中的執行器(Executor)將為你管理Thread對象,從而簡化了并發編程。Executor在客戶端和執行任務之間提供了一個間接層,Executor代替客戶端執行任務。Executor允許你管理異步任務的執行,而無須顯式地管理線程的生命周期。
public interface Executor { void execute(Runnable command);}ExecutorService擴展了Executor并添加了一些生命周期管理的方法。一個Executor的生命周期有三種狀態,運行 ,關閉 ,終止 。
public interface ExecutorService extends Executor { //關閉線程池,不允許新的任務,但正在等待的任務會被執行。 void shutdown(); //關閉線程池,試圖停止正在執行的任務,不允許新的任務,拋棄正在等待的任務并返回。 List<Runnable> shutdownNow(); //線程池是否已經關閉 boolean isShutdown(); //線程池是否終止(所有線程都已經關閉) boolean isTerminated(); //阻塞等待一段時間直到線程池被終止或超時或發生中斷異常 boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException; //提交一個任務,返回任務的future對象,可以知道任務的執行情況 Future<T> submit(Callable<T> task); //同上 Future<T> submit(Runnable task, T result); //同上 Future<?> submit(Runnable task); //批量執行任務,全部執行完再返回 List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks) throws InterruptedException; //批量執行任務,全部執行完或超時了就返回 List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit) throws InterruptedException; //批量執行任務,成功完成一個就返回 T invokeAny(Collection<? extends Callable<T>> tasks) throws InterruptedException, ExecutionException; //批量執行任務,成功完成一個或超時就返回 T invokeAny(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException;}ThreadPoolExecutor是ExecutorService的一個實現類,它使用可能的幾個池線程之一執行每個提交的任務,通常使用 Executors 工廠方法配置。
Executors類,提供了一系列工廠方法用于創建線程池,返回的線程池都實現了ExecutorService接口。
public static ExecutorService newFixedThreadPool(int nThreads) 創建固定數目線程的線程池。
public static ExecutorService newCachedThreadPool() 創建一個可緩存的線程池,調用execute 將重用以前構造的線程(如果線程可用)。如果現有線程沒有可用的,則創建一個新線程并添加到池中。終止并從緩存中移除那些已有 60 秒鐘未被使用的線程。
public static ExecutorService newSingleThreadExecutor() 創建一個單線程化的Executor。
public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) 創建一個支持定時及周期性的任務執行的線程池,多數情況下可用來替代Timer類。
新聞熱點
疑難解答