【发布时间】:2016-06-09 01:56:09
【问题描述】:
假设我这样做:
(future
(do-the-thing))
我是否可以保证,无论 (do-the-thing) 做什么,
- 将创建一个全新的线程,而不是从池中获取一个或类似的东西?
- 除了
(do-the-thing)之外的任何东西都不会在该新线程上运行? - 一旦
(do-the-thing)在那个新线程上执行,线程会终止吗?
如果不是,在什么情况下这些假设是错误的?
【问题讨论】:
-
我的理解是,在不使用专用库的情况下,Clojure 中的期货只不过是 Java 期货。所以这可能已经作为一个 Java 问题被问及并得到了回答。
-
@ChrisMurphy 如果您可以将我链接到 Java 问题,那就太好了!
-
Java 期货块,而 Scala 没有。然而,Clojure 中的这个缺点已通过 library 得到修复。
-
@ChrisMurphy 我不明白这与我的问题有什么关系。你能解释一下吗?
-
我认为@ymonad 已经很好地回答了你的问题。我想补充的一件事是,即使它的实现方式不同,你也不应该依赖它来做任何重要的事情。 AFAIK 这没有任何记录,因此它是一个实现细节,将来总是会改变,并且会破坏任何依赖于特殊行为的代码。如果你真的需要一个线程,那就找一个真正的 Java 线程。
标签: multithreading clojure future