multithreading - 如何在单个线程中执行一些Clojure future ?

标签 multithreading clojure future

我想在Clojure中创建一些 future ,并在特定线程上全部运行它们,以确保它们一次运行。这可能吗?

包装Java库来完成此操作并不难,但是在执行此操作之前,我想确保自己没有错过Clojure的执行方法。在Java中,我可以通过实现FutureTask并将这些任务提交给单线程执行器来实现。

最佳答案

Clojure的future macro调用使用future-calla dedicated executor service函数。这意味着您无权强制执行顺序执行。

另一方面,您可以使用promise代替future对象,并可以使用一个future线程按顺序deliver结果。 Promise的API与future提供的API类似。他们也有derefrealized?

以下代码示例使子任务在后台的新线程上顺序执行,而函数的立即返回结果包含对计算值的 promise 。

(defn start-async-calc []
  (let [f1 (promise)
        f2 (promise)
        f3 (promise)]
    (future
      (deliver f1 (task-1))
      (deliver f2 (task-2))
      (deliver f3 (task-3)))
    {:task1 f1
     :task2 f2
     :task3 f3}))

关于multithreading - 如何在单个线程中执行一些Clojure future ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47998199/

相关文章:

java - 如何在 Java 中触发 sleep 或 hibernate 唤醒功能?

java - Apache Ignite 中单个分区上的 ScanQuery 是单线程还是多线程?

c++ - waitforsingleobject 等待一个已经发出信号的事件

orm - Clojure - 处理数据库持久性的惯用方法

windows - 更新 swank/slime 的 Clojure 版本

java - 是否有更有效的方法从多线程过程中获取 "future"结果?

scala - Akka Streams - 如何检查流是否成功运行?

java - 退出的主线程会杀死异步任务吗?

Scala:将执行上下文传递给 Future 的 map 函数的语法

reflection - 如何确定该类型实现了哪些协议(protocol)?