2017-02-18 3 views
0

Я относительно новичок в Scala и борюсь с выбором лучшего способа иметь потокобезопасную коллекцию.Тематическая сборка в Scala для Akka Актеры

У меня есть актер, который отвечает за регистрацию/отмену заказов. Я был в состоянии достигнуть его

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

Нет необходимости использовать поточно-безопасную коллекцию в актере. – Ryan

ответ

0

Неизменяемые коллекции. Это делает ListBuffer абсолютным бездействием! На самом деле, цель для неизменности в целом (абсолютно, если передача сообщений между участниками или ваша реализация будет нарушена). Вам придется явно импортировать их из пакета scala.collection.immutable. С другой стороны, я не вижу причины, по которой вы передадите коллекцию заказов вместо объявления ее как var внутри актера.

+0

Итак, вы говорите, чтобы сделать поток операций безопасным, мы должны стремиться к неизменности, но полезно ли создавать новый список каждый раз, когда мы можем просто добавить или удалить? –

+1

Почему это была бы плохая идея? Есть некоторые случаи, когда изменяемые объекты могут быть немного более эффективными, но я не вижу причины не использовать неизменяемые коллекции. –

Смежные вопросы