在Scala中为Akka Actors进行线程安全收集

时间:2017-02-18 23:05:34

标签: scala list akka

我在Scala中相对较新,并且在决定最佳方式进行线程安全收集方面苦苦挣扎。

我有一个负责注册/取消注册订单的演员。

我能够实现它
 class OrderOperationActor(orders: ListBuffer[Order]) extends Actor{
override def receive = {
case incomingOrder: IncomingOrder => {
   if(incomingOrder.orderOperation == OrderOperation.Register){
      println("Registering a new order in the list ")
      orders += incomingOrder.order
      sender ! orders
   }
  else{
     println("Un-registering a new order in the list ")
     orders -= incomingOrder.order
     sender ! orders
   }
}
 }
}

但是想知道它是否是最佳选择,因为删除项目的时间复杂度会很高?我们可以使用地图吗?

1 个答案:

答案 0 :(得分:0)

不可变的收藏品。这使得ListBuffer绝对禁止!实际上,一般来说,目标是不变性(绝对是在演员之间传递消息或者你的实现将被打破)。您必须从scala.collection.immutable包中明确导入它们。另一方面,我看不出为什么你会传递一系列订单而不是在演员中声明它为var的原因。