Поскольку scala.actors теперь устарел и заменяется актерами akka (а так как в akka-актерах нет реакции или receiveWithin), здесь описывается, как это сделать с использованием акторов akka (на самом деле это менее «хак», чем использованиеreceiveWithin в любом случае IMHO).
В приведенном ниже примере запланирован запуск запуска через 5 секунд:
import akka.actor.{ActorSystem, Scheduler}
import scala.concurrent.duration.FiniteDuration
import scala.concurrent.ExecutionContext.Implicits.global
class TimerExample {
def example() = {
def scheduler: Scheduler = ActorSystem.create("timer-example").scheduler
val myRunnable = new Runnable {
override def run(): Unit = {
println("run invoked")
}
}
println("scheduling...")
scheduler.scheduleOnce(FiniteDuration(5,TimeUnit.SECONDS),myRunnable)
Thread.sleep(6000)
println("should have printed 'run invoked'")
}