Executor和ExecutorService
来源:互联网 发布:闹钟软件 编辑:程序博客网 时间:2024/05/21 09:39
Executor
Executor用来执行已提交的Runnable任务,该接口将任务的提交与具体执行进行了解耦。它通常用来代替显示地创建线程,例如:
Executor executor = anExecutor;executor.execute(new RunnableTask1());executor.execute(new RunnableTask2());
而不是使用new Thread(new RunnableTask()).start()。
然而,该接口并不严格要求任务的执行是异步的,在最简单的情况下,任务的执行是在调用者线程上:
class DirectExecutor implements Executor { public void execute(Runnable r) { r.run(); }}
更典型的情况是,任务是在其它线程上执行,比如线程池。
该接口只有一个方法,如下:
void execute(Runnable command);
该方法的作用是提交一个任务,这个任务在未来的某一时刻会被执行,该任务可能被新的线程执行,可能线程池中的线程执行,可能在提交者自身的线程执行。
ExecutorService
ExecutorService继承于Executor,并提供了管理任务的终止,以及产生可以追踪一个或多个异步任务进程的Future的方法。
ExecutorService提供了两个不同的关闭方法——那将引起拒绝接受新任务,shutdown方法允许在终止前继续执行之前已提交的任务,shutdownNow方法将阻止等待任务执行并尝试停止正在执行的任务,并且返回等待执行任务的列表。源码如下:
void shutdown();
List<Runnable> shutdownNow();
方法isTerminated用于判断在关闭后所有任务是否已经全部执行完毕,如果未调用过shutdown或者shutdownNow方法,该函数的返回值不可能为true。
方法awaitTermination会一直阻塞直到所有任务已经执行完毕或者超时溢出,其源码如下:
boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException;
方法submit向ExecutorService提交一个任务,并且返回一个Futrue对象,用于追踪任务的执行情况。
<T> Future<T> submit(Callable<T> task);<T> Future<T> submit(Runnable task, T result);Future<?> submit(Runnable task);
上述三个submit方法的区别在于任务执行完毕后,第一个Future.get方法返回任务执行结果,第二个Future.get方法返回给定参数result,第三个返回null。
更多方法请参见Java API。
- Executor/ExecutorService和ExecutorCompletionService
- Executor和ExecutorService
- Executor/ExecutorService和ExecutorCompletionService
- Executor & ExecutorService
- 任务执行器Executor/ExecutorService和ExecutorCompletionService
- Executor, ExecutorService 和 Executors 间的不同
- Executor, ExecutorService 和 Executors 间的不同
- Executor, ExecutorService 和 Executors 间的不同
- Executor, ExecutorService 和 Executors 间的不同
- Executor, ExecutorService 和 Executors 间的不同
- ExecutorService&Executor接口源码
- Executor,Executors,ExecutorService
- [Java并发包学习一]Executor和ExecutorService
- [Java并发包学习一]Executor和ExecutorService
- [Java并发包学习一]Executor和ExecutorService
- [Java并发包学习一]Executor和ExecutorService
- [Java并发包学习一]Executor和ExecutorService
- 【ThreadPool】Executor, ExecutorService 和 Executors 间的不同
- 22 k个骰子掷出n的概率
- [POJ 3255]Roadblocks[dijkstra][次短路]
- 学习笔记(二)——直方图均衡化和匹配
- 小结NSString 以后还会补充
- nginx机制-从源码分析(1)
- Executor和ExecutorService
- LeetCode-53-Maximum Subarray(DP/分治)-Medium
- 消息队列NetMQ使用介绍
- UNREAL FRAMEWORK & NETWORK
- 算法实现两个数交换(多种方法)
- UITextFielddelegate委托方法注释
- Python 遍历字典——学习笔记
- iOS学习之路-超级猜图
- iOS开发检测项目中哪个库包含了idfa