我是新來的阿卡。 任何人都可以建議/確認在重負載下多線程環境下的代碼/方法將會安全嗎? 與Execute方法特別相關的問題。 也將很高興知道這個一般/典型的方法。 PS。我也嘗試檢查下一篇文章:https://twitter.github.io/scala_school/concurrency.html 但這不是阿卡具體等 感謝,scala/akka:保護數據免於競爭條件
下面是代碼:
object ExchangeSystem {
val openOrders = new ListBuffer[Order]()
val executedOrders = new ListBuffer[Order]()
def Execute(matchedOrder: Order, order: Order) : Unit =
{
this.synchronized {
order.SetAsExecuted(order.price)
matchedOrder.SetAsExecuted(order.price)
openOrders -= matchedOrder
executedOrders += order
executedOrders += matchedOrder
}
}
class ExchangeSystem extends Actor {
import ExchangeSystem._
def receive = {
case order : Order => {
ExchangeSystem.message = order
// Attempt to match order
val matchedOrder = ExchangeSystem.matchOrder(order)
if (matchedOrder != None){
ExchangeSystem.Execute(matchedOrder.get, order)
}
else {
openOrders += order
}
}
}
}
謝謝,保持一個演員的數據是我的一般感受。我認爲第二種解決方案會爲我做。 – Pavel