Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Run a function periodically in Scala

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?

like image 663
src091 Avatar asked Aug 17 '14 16:08

src091


People also ask

How do you sleep in Scala?

sleep() in Scala. Thread. sleep(time) is used to sleep a thread for some specific amount of time.


2 Answers

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() 
like image 73
0__ Avatar answered Sep 21 '22 07:09

0__


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.

like image 34
dskrvk Avatar answered Sep 23 '22 07:09

dskrvk