2014-04-24 1 views
2

다음은 지연 2 초 후에 계산을 실행하지만 앱을 실행할 때 절대 종료되지 않습니다. 앱을 종료하는 코드는 무엇입니까?timer.schedule을 호출 할 때 주 앱이 종료되지 않는 이유

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

val timer = new java.util.Timer()이 시작됩니다 (표준 Java 스레드를 확장하고 무한 루프로 구현됩니다) 백그라운드에서 실행 및 종료에서 응용 프로그램을 방지한다하는 TimerThread.

System.exit(0)을 스크립트 끝 부분에서 실행하여 모든 백그라운드 스레드를 중지 할 수 있습니다.

자바 타이머 대신 Akka scheduler을 사용하셨습니까?

+0

timeoutFuture의 def가 playframework에서 복사되었으므로 우리는 그것을 대체하기 위해 Akka 스케줄러를 사용할 수 있습니까? 프레임 워크/src/iteratees/src/main/scala/play/api/libs/iteratee/Concurrent.scala의 것입니다. –