今天早上忽然想起来, 刚毕业工作时候,有道线程题,是实现设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1.
如果是java而言,实现非常简单,scala实现则更简单,更易理解.
当然没有特别漂亮的代码,今天想起来试了一下,感觉有点意思:
object ActorServer extends Application {
import akka.actor.{ Actor, Props, ActorSystem }
import akka.testkit.CallingThreadDispatcher
import scala.concurrent.duration._
import akka.pattern.ask
implicit val system = ActorSystem()
var i = 10
var add = (n: Int) => n + 1
var decrease = (n: Int) => n - 1
class EchoServer extends Actor {
def receive = {
case "+" => {
i = add(i)
}
case "-" => i = decrease(i)
case "show" =>
println(i)
}
}
var ops = (1 to 4).map(x =>system.actorOf(Props(new EchoServer())))
for((op,index) <- ops.view.zipWithIndex){if(index % 2 == 0) op ! "+" else op ! "-" }
ops(0)!"show"
system.shutdown
}