I want to call an arbitrary function every n
seconds. Basically I want something identical to SetInterval
from Javascript. How can I achieve this in Scala?
sleep() in Scala. Thread. sleep(time) is used to sleep a thread for some specific amount of time.
You could use standard stuff from 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)
Or 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()
If you happen to be on Akka, Scheduler is quite convenient for this:
val system = ActorSystem("mySystem", config) // ...now with system in current scope: import system.dispatcher system.scheduler.schedule(10 seconds, 1 seconds) { doSomeWork() }
There is also scheduleOnce
for one-off execution.
The usual warnings about closing over mutable state apply.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With