【发布时间】:2014-06-22 02:49:05
【问题描述】:
可能还有其他方法可以做我将在这里用作示例的方法,但这不是我的问题的重点。
我正在这样做:
(future (clojure.java.shell/sh "sleep" "3" :dir "/tmp"))
启动对 shell 脚本的异步调用。 ("sleep 3" 当然也只是一个例子)。
我想知道如果(future...) 被调用,是否可以保证某个线程将在某个时候启动并执行未来的内容?
或者只有在尝试解除对未来的引用时才能保证这一点?
(我知道,一旦你尝试取消引用它就会永远开始的未来不会很有用,但这不是我的问题的重点:我想知道的是它是否保证一个未来,即使没有对该未来进行解引用,也保证从某一点开始[考虑到程序仍在运行])
【问题讨论】:
-
这是预期,但我认为您不会在 Java 规范中找到保证。特定实现可能会做出保证,例如该线程调度由执行抢占式多任务的给定操作系统处理。
-
@A.Webb: 啊很有趣...而且是否保证 Clojure 的 future 会调用 Java 的 Thread 的 开始方法?
-
据我所知,期货立即开始。它独立于取消引用。这篇文章可能会有所帮助:braveclojure.com/concurrency
-
这些是实现细节,但 Clojure 的未来
标签: multithreading clojure future dereference