執行緒池中Executor、ExecuteService、Executors 的區別
阿新 • • 發佈:2019-01-25
Executor、ExecuteService都是介面,ExecuteService繼承於Executor,
Executor:介面
介面Executor裡面只有一個execute方法:
ExecutorService:介面
介面ExecutorService繼承於Executor
Executors :類
直接援引JDK文件的說明來說一下這個類的作用
Factory and utility methods for Executor, ExecutorService, ScheduledExecutorService, ThreadFactory, and Callable classes defined in this package.
例項:
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
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.
例項:
上面例子用到了Executors類的newCachedThreadPool()方法。看一下這個方法: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中新增新的任務 } }
在原始碼中我們可以知道兩點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