使用期货和Thread.sleep

时间:2015-01-26 22:36:26

标签: scala future

通过执行此scala代码,我在控制台中没有任何输出。 (我真的不明白发生了什么)

如果我删除Console.println("Console.println OK!") =>一切似乎都很好。

如果我删除Thread.sleep(2000) =>一切似乎都很好。

你对此有什么想法吗?非常感谢你!

克莱门特

import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration._
import scala.concurrent.{Await, Future}
import scala.language.postfixOps

object ScalaFuture {

  def main(args: Array[String]) {

    val f: Future[String] = Future {
      Thread.sleep(2000)
      "future value"
    }

    f.onSuccess {
      case s => {
        Console.println("Console.println OK!")
        System.out.println("System.out.println OK!")
      }
    }

    Await.ready(f, 60 seconds)
  }

}

2 个答案:

答案 0 :(得分:26)

你的等待是等待将来完成,这是在2秒后完成的,但是它不会等待onSuccess处理程序,它在另一个线程(类似于将来)中执行,但在{{之后1}},所以进程会比你打印的东西更早退出。要正确处理它 - 为Await.ready(f, 60 seconds)

创造新的未来
onComplete

val f: Future[String] = Future { Thread.sleep(2000) "future value" } val f2 = f map { s => println("OK!") println("OK!") } Await.ready(f2, 60 seconds) println("exit") 的结果:

Await.ready(f, ...)

exit OK! OK! 的结果:

Await.ready(f2, ...)

答案 1 :(得分:-14)

将readLine()放入代码中。