假设我有一个Stream
计算起来相当昂贵的东西。我可以通过编写类似的东西轻松创建一个“提前计算”的线程
import scala.actors.Futures._
val s = future { stream.size }
如果我然后丢弃对 this 的引用,Future
该线程会被垃圾收集器杀死吗?
假设我有一个Stream
计算起来相当昂贵的东西。我可以通过编写类似的东西轻松创建一个“提前计算”的线程
import scala.actors.Futures._
val s = future { stream.size }
如果我然后丢弃对 this 的引用,Future
该线程会被垃圾收集器杀死吗?
不,线程属于调度程序。在任何情况下,调度程序都会引用未完成的 Future 主体(这发生在 中a.start()
),因此在完成之前不会被垃圾收集。
object Futures {
/** Arranges for the asynchronous execution of `body`,
* returning a future representing the result.
*
* @param body the computation to be carried out asynchronously
* @return the future representing the result of the
* computation
*/
def future[T](body: => T): Future[T] = {
val c = new Channel[T](Actor.self(DaemonScheduler))
val a = new FutureActor[T](_.set(body), c)
a.start()
a
}
}