【发布时间】:2014-06-16 12:18:25
【问题描述】:
考虑这段代码:
Thread thread = new Thread(() -> tasks.parallelStream().forEach(Runnable::run));
tasks 是应并行执行的 Runnable 列表。 当我们启动这个线程并开始执行时,根据一些计算,我们需要中断(取消)所有这些任务。
中断线程只会停止其中一个执行。我们如何处理他人?或者也许不应该那样使用 Streams?或者您知道更好的解决方案?
【问题讨论】:
-
我不明白。
ExecutorService.invokeAll有一个明确的方法可以取消创建的任务。你为什么坚持使用不打算提供这种功能的东西?在tasks.parallelStream().forEach(Runnable::run)中没有什么比在executor.invokeAll(tasks)中更具可读性了 -
因为运行它的代码,有时需要通过使用 tasks.stream() 而不是并行流来执行同步任务,我现在唯一使用流是它们更具可读性和简单性理解代码审查的人......但可能你是对的,这些不打算以我使用它的方式使用。
-
您可以使用单线程
ExecutorService,甚至可以实现就地运行ExecutorService,这在继承AbstractExecutorService时非常容易。这样您就可以免费获得取消支持的顺序执行...
标签: multithreading concurrency java-8 java-stream