История изменений
Исправление cdshines, (текущая версия) :
Традиционный пинг-понг, но в этом случае многопоточность не нужна.
Если хочется, сделай на акторах. Для примера накидал сессию для ammonite, попробуй, если будет охота.
interp.load.ivy("com.typesafe.akka" % "akka-actor_2.11" % "2.4.10")
import akka._
import akka.actor._
import scala.compat.Platform
import scala.util.Random
case class Start(ref: ActorRef)
case object Run
class Timer extends Actor {
def receive = {
case Start(worker: ActorRef) =>
val time = Random.nextInt(1000);
println(s"waiting for $time ms");
Thread.sleep(time); // так не делают, но для эмуляции задержек прокатит
worker ! Run
}
}
class Worker extends Actor {
def receive = {
case Run =>
println(s"run @ ${Platform.currentTime}");
sender() ! Start(self)
}
}
val system = ActorSystem()
val w = system.actorOf(Props(classOf[Worker]))
val t = system.actorOf(Props(classOf[Timer]))
t ! Start(w)
Исходная версия cdshines, :
Традиционный пинг-понг, но в этом случае многопоточность не нужна.
Если хочется, сделай на акторах. Для примера накидал сессию для ammonite, попробуй, если будет охота.
interp.load.ivy("com.typesafe.akka" % "akka-actor_2.11" % "2.4.10")
import akka._
import akka.actor._
import scala.compat.Platform
import scala.util.Random
case class Start(ref: ActorRef)
case object Run
class Timer extends Actor {
def receive = (msg: Any) => msg match {
case Start(worker: ActorRef) =>
val time = Random.nextInt(1000);
println(s"waiting for $time ms");
Thread.sleep(time); // так не делают, но для эмуляции задержек прокатит
worker ! Run
}
}
class Worker extends Actor {
def receive = (msg: Any) => msg match {
case Run =>
println(s"run @ ${Platform.currentTime}");
sender() ! Start(self)
}
}
val system = ActorSystem()
val w = system.actorOf(Props(classOf[Worker]))
val t = system.actorOf(Props(classOf[Timer]))
t ! Start(w)