为什么主应用程序在调用timer.schedule时不会退出

时间:2014-04-24 09:23:03

标签: scala schedule

在下面,它会在延迟2秒后运行计算,但在运行应用程序时,它永远不会退出。阻止应用退出的代码是什么?

object Test extends App{
   import scala.concurrent._
   import java.util._
   import java.util.concurrent.{ TimeUnit }
   val timer = new java.util.Timer()
   def timeoutFuture[A](v: A, delay: Long, unit: TimeUnit): Future[A] = {
    println("inner")
    val p = Promise[A]()
    println("inner")
    timer.schedule(new java.util.TimerTask {
      def run() {
        p.success(v)
      }
    }, unit.toMillis(delay))
    println("inner")
    p.future
   }
   println("begin")
   val x1=timeoutFuture[Int](1+1,2,TimeUnit.SECONDS)
   println("end")
   println("quit")
}

1 个答案:

答案 0 :(得分:1)

val timer = new java.util.Timer()将启动TimerThread(扩展标准Java线程并实现为无限循环),它在后台运行并阻止您的应用程序退出。

您可以在脚本末尾运行System.exit(0)以停止所有后台线程。

您还考虑使用Akka scheduler而不是Java Timer吗?