【发布时间】:2013-03-11 10:57:08
【问题描述】:
我需要运行两个并行计算并在第二个完成时中断第一个。目前,我已经使用标准 Java 线程实现了它:
/**
* Runs <var>sup</var> in parallel with <var>main</var>.
* Terminate (interrupt) it when <var>main</var> finishes.
*/
def support[R](sup: => Unit, main: => R): R = {
val supThread = new Thread {
override def run = { sup };
}
supThread.start();
try {
main;
} finally {
supThread.interrupt();
}
}
在不显式使用Threads 的情况下,是否可以使用Scala 的并发库来实现相同的行为?
【问题讨论】:
-
您使用 Java API 的实现并不可靠 - 中断并不总是按预期工作,可能永远不应该使用。最好为提前终止明确编码 - 例如如上面评论中链接的答案。共享 AtomicBoolean 是(许多)可能的解决方案之一。
标签: scala concurrency interrupt-handling