博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Executor和ExecutorService
阅读量:4217 次
发布时间:2019-05-26

本文共 1353 字,大约阅读时间需要 4 分钟。

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
shutdownNow();

方法isTerminated用于判断在关闭后所有任务是否已经全部执行完毕,如果未调用过shutdown或者shutdownNow方法,该函数的返回值不可能为true。

方法awaitTermination会一直阻塞直到所有任务已经执行完毕或者超时溢出,其源码如下:

boolean awaitTermination(long timeout, TimeUnit unit)         throws InterruptedException;

方法submit向ExecutorService提交一个任务,并且返回一个Futrue对象,用于追踪任务的执行情况。

Future
submit(Callable
task);
Future
submit(Runnable task, T result);Future
submit(Runnable task);

上述三个submit方法的区别在于任务执行完毕后,第一个Future.get方法返回任务执行结果,第二个Future.get方法返回给定参数result,第三个返回null。

更多方法请参见Java API。

转载地址:http://dvtmi.baihongyu.com/

你可能感兴趣的文章
osg中使用MatrixTransform来实现模型的平移/旋转/缩放
查看>>
(一) Qt Model/View 的简单说明
查看>>
(二)使用预定义模型 QStringListModel例子
查看>>
UVM:5.3.2 多domain 的例子
查看>>
UVM:7.4.5 加入存储器
查看>>
UVM:7.5.1 期望值与镜像值
查看>>
UVM:7.5.2 常用操作及其对期望值和镜像值的影响
查看>>
UVM:7.6.1 检查后门访问中hdl 路径的sequence
查看>>
UVM:7.6.2 检查默认值的sequence
查看>>
UVM:7.7.1 使用reg_predictor
查看>>
UVM:7.7.2 使用UVM_PREDICT_DIRECT功能与mirror 操作
查看>>
UVM:7.7.3 寄存器模型的随机化与update
查看>>
UVM:7.7.4 扩展位宽
查看>>
UVM:7.8.1 get_root_blocks
查看>>
UVM:7.8.2 get_reg_by_offset 函数
查看>>
UVM:8.1.1 任务与函数的重载
查看>>
UVM:8.1.2 约束的重载
查看>>
UVM:8.2.2 重载的方式及种类
查看>>
UVM:8.2.3 复杂的重载
查看>>
UVM:8.2.4 factory 机制的调试
查看>>