Say I have a Stream
that's rather expensive to compute. I can easily create a thread that "computes ahead" just by writing something like
import scala.actors.Futures._
val s = future { stream.size }
If I then throw away the reference to this Future
, will that thread be killed off by the garbage collector?
No. The thread belongs to the scheduler. In any case, the scheduler has a reference to the body un-finished Future (this happens in a.start()
), so it won't be garbage collected before completion.
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
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With