1. 程式人生 > >執行緒池中Executor、ExecuteService、Executors 的區別

執行緒池中Executor、ExecuteService、Executors 的區別

Executor、ExecuteService都是介面,ExecuteService繼承於Executor,

Executor:介面
介面Executor裡面只有一個execute方法: 
void execute(Runnable command)  

ExecutorService:介面
介面ExecutorService繼承於Executor
public interface ExecutorService extends Executor {  
    void shutdown();  
    List<Runnable> shutdownNow();  
    boolean isShutdown();  
    boolean isTerminated();  
    boolean awaitTermination(long timeout, TimeUnit unit)  
    <T> Future<T> submit(Callable<T> task);  
    <T> Future<T> submit(Runnable task, T result);  
    Future<?> submit(Runnable task);  
    <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)  
    <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit)  
    <T> T invokeAny(Collection<? extends Callable<T>> tasks)  
    <T> T invokeAny(Collection<? extends Callable<T>> tasks,  
                    long timeout, TimeUnit unit)  
}  

Executors :類
直接援引JDK文件的說明來說一下這個類的作用
Factory and utility methods for Executor, ExecutorService, ScheduledExecutorService, ThreadFactory, and Callable classes defined in this package. 
例項:
public class CacheThreadPool {  
    public static void main(String[] args) {  
        ExecutorService exec=Executors.newCachedThreadPool();  
        for(int i=0;i<5;i++)  
            exec.execute(new LiftOff());  
        exec.shutdown();//並不是終止執行緒的執行,而是禁止在這個Executor中新增新的任務  
    }  
} 
上面例子用到了Executors類的newCachedThreadPool()方法。看一下這個方法:
public static ExecutorService newCachedThreadPool() {  
        return new ThreadPoolExecutor(0, Integer.MAX_VALUE,  
                                      60L, TimeUnit.SECONDS,  
                                      new SynchronousQueue<Runnable>());  
    }  
 在原始碼中我們可以知道兩點
1、newCachedThreadPool()方法返回型別是ExecutorService;ExecutorService中有一個execute方法,這個方法的引數是Runnable型別。也就是說,將一個實現了Runnable型別的類的例項作為引數傳入execute方法並執行,那麼執行緒就相應的執行了。 
2、方法newCachedThreadPool()返回值實際是另一個類ThreadPoolExecutor的例項。

引用文件:
http://www.cnblogs.com/yezhenhan/archive/2012/01/07/2315645.html
http://cuisuqiang.iteye.com/blog/2019372