【问题标题】:Are futures guaranteed to start at one point?期货是否保证从某一点开始?
【发布时间】: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


【解决方案1】:

保证将future发送到ExecutorService(到clojure.lang.Agent/soloExecutor

即使您不尝试取消引用它也可以保证发送 (future-call source)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    相关资源
    最近更新 更多