Scala 为什么主应用程序没有';调用timer.schedule时不能退出

Scala 为什么主应用程序没有';调用timer.schedule时不能退出,scala,schedule,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: Lo

在下面的示例中,它会在延迟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")
}

val timer=new java.util.timer()
将启动一个
TimerThread
(它扩展了一个标准java线程,并实现为一个无限循环),该线程在后台运行,防止应用程序退出

您可以在脚本结束时运行
System.exit(0)
,以停止所有后台线程


你也考虑过用它来代替Java定时器吗?

timeoutFuture的定义是从playframework复制的,所以我们可以用Akka调度程序来代替它?它来自framework/src/iteratees/src/main/scala/play/api/libs/iteratee/Concurrent.scala