【发布时间】:2014-08-06 05:56:15
【问题描述】:
我正在尝试创建一个实用程序类,该类将能够处理可运行包并以不同的组合(同步、异步)执行它们。
例如:假设这是一个类似 json 的复合任务表示。 “[]”保持异步任务,“{}”保持同步任务。
[
task,
[task, task, task],
{task, task, [task, task]}
]
这是(将)以方法链接方式实现的:
fromAsyncTasks(
from(runnable),
fromSyncedTasks(from(runnable), from(runnable), from(runnable)),
fromAsyncTasks(from(runnable), from(runnable), fromAsyncTasks(from(runnable), from(runnable)))
).execute();
正如您可能理解的那样,.execute() 是以同步或异步方式递归调用其他任务 execute()。 Task 接口还支持 terminate() 停止(中断任务),因此如果我保留对这些任务的引用,我将能够终止它们。
所以问题 #1 是:是否有任何工具、库至少提供此功能?
和#2:如果我使用流进行并行(异步情况)执行,我该如何终止它们?
tasks.parallelStream().forEach(Runnable::run)
【问题讨论】:
-
@Holger 我确实知道 Executor 接口,但问题是会有很多业务逻辑会动态执行一些任务(同步或异步或组合),如果我们几乎不使用 Executors 代码将是可读的。
-
澄清一下:你的意思是 async 的 inparallel 和 sync的 sequentially >?
标签: java multithreading concurrency java-8 java-stream