How to write a timer actor in Scala?

后端 未结 6 943
忘了有多久
忘了有多久 2020-12-20 12:30

I need an actor to send a message every minute. How do I best achieve this behaviour? I am afraid of using java.lang.Thread.sleep(long millis) as a thread can b

6条回答
  •  情深已故
    2020-12-20 13:16

    import scala.actors._
    class Wakeup[A](millis: Int, who: ReplyReactor, alarm: A) extends Thread {
      val done = new java.util.concurrent.atomic.AtomicBoolean(false)
      override def run {
        while (!done.get()) {
          who ! alarm
          Thread.sleep(millis)
        }
      }
    }
    case object BEEP {}
    val a = new ReplyReactor { def act { loop { react {
      case BEEP => println("Wha?!  "+new java.util.Date)
      case _ =>
    }}}}
    val b = new Wakeup(60000,a,BEEP)
    a.start
    

    Why use an actor when a thread is what you want?

    scala> b.start
    
    scala> Wha?!  Mon Nov 07 18:43:18 EST 2011
    Wha?!  Mon Nov 07 18:44:18 EST 2011
    Wha?!  Mon Nov 07 18:45:18 EST 2011
    Wha?!  Mon Nov 07 18:46:18 EST 2011
    Wha?!  Mon Nov 07 18:47:18 EST 2011
    Wha?!  Mon Nov 07 18:48:18 EST 2011
    Wha?!  Mon Nov 07 18:49:18 EST 2011
    Wha?!  Mon Nov 07 18:50:18 EST 2011
    Wha?!  Mon Nov 07 18:51:18 EST 2011
    Wha?!  Mon Nov 07 18:52:18 EST 2011
    

提交回复
热议问题