许多 Executor 实现都对调度任务的方式和时间强加了某种限制。以下执行程序使任务提交与第二个执行程序保持连续,这说明了一个复合执行程序。
class SerialExecutor implements Executor {
final Queue<Runnable> tasks = new LinkedBlockingQueue<Runnable>();
final Executor executor;
Runnable active;
SerialExecutor(Executor executor) {
this.executor = executor;
}
public synchronized void execute(final Runnable r) {
tasks.offer(new Runnable() {
public void run() {
try {
r.run();
} finally {
scheduleNext();
}
}
});
if (active == null) {
scheduleNext();
}
}
protected synchronized void scheduleNext() {
if ((active = tasks.poll()) != null) {
executor.execute(active);
}
}
}
没看明白, 这个在外面该如何使用呢? 构造参数Executor是干什么的, 怎么连续的提交任务?
关于 Executor 可以参考 java并发编程-Executor框架。SerialExecutor 的作用是使用指定的(通过构建函数传入)Executor 对象,顺序的执行任务(通过 execute() 方法实现)
SerialExectuor.execute() 会把传入的 Runnable 放在队列里,然后按顺序执行,如果队列为空(初始或已经执行完),会立即启动传入的 Runnable 对象,用法大概就像这样
SerialExecutor sExecutor = new SerialExecutor(sourceExecutor);
sExecutor.execute(task1);
sExecutor.execute(task2);
sExecutor.execute(task3);
// ...
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。