n
秒ごとに任意の関数を呼び出したいです。基本的に、JavascriptのSetInterval
と同じものが必要です。 Scalaでこれをどのように達成できますか?
Java.util.concurrent
の標準的なものを使用できます。
import Java.util.concurrent._
val ex = new ScheduledThreadPoolExecutor(1)
val task = new Runnable {
def run() = println("Beep!")
}
val f = ex.scheduleAtFixedRate(task, 1, 1, TimeUnit.SECONDS)
f.cancel(false)
またはJava.util.Timer
:
val t = new Java.util.Timer()
val task = new Java.util.TimerTask {
def run() = println("Beep!")
}
t.schedule(task, 1000L, 1000L)
task.cancel()
たまたまAkkaを使用している場合、 Scheduler はこれに非常に便利です。
val system = ActorSystem("mySystem", config)
// ...now with system in current scope:
import system.dispatcher
system.scheduler.schedule(10 seconds, 1 seconds) {
doSomeWork()
}
1回限りの実行用のscheduleOnce
もあります。
変更可能な状態を閉じることに関する通常の警告が適用されます。
より機能的にすることができます
import Java.util.TimerTask
import Java.util.Timer
object TimerDemo {
implicit def function2TimerTask(f: () => Unit): TimerTask = {
return new TimerTask {
def run() = f()
}
}
def main(args : Array[String]) {
def timerTask() = println("Inside timer task")
val timer = new Timer()
timer.schedule(function2TimerTask(timerTask),100, 10)
Thread.sleep(5000)
timer.cancel()
}
}
ここからの「Hello Worldの例」と組み合わせたAkkaの更新: Lightbend Guides ここからの指示を使用: Scheduler
import scala.concurrent.duration._
howdyGreeter ! WhoToGreet("Akka")
val cancellable =
system.scheduler.schedule(
0 seconds,
1 seconds,
howdyGreeter,
Greet
)