1
如果我安全地改變我的演員內部的可變映射/隊列,我有點困惑。我是否安全地在我的akka演員中變異或者這不是線程安全的?
有人可以告訴我,如果這段代碼是線程安全和正確的?
class SomeActor extends Actor {
val userQ = mutable.Queue.empty[User]
val tranQ = mutable.Map.empty[Int, Transaction]
def receive = {
case Blank1 =>
if(userQ.isEmpty)
userQ ++= getNewUsers()
case Blank2 =>
val companyProfile = for {
company <- api.getCompany() // Future[Company]
location <- api.getLoc() // Future[Location]
} yield CompanyProfile(company, location)
companyProfile.map { cp =>
tranQ += cp.id -> cp.transaction // tranQ mutatated here
}
}
}
既然我正在用期貨突變tranQ,這是否安全?
這是我的理解,每個演員的消息是以串行方式處理,所以雖然可能會皺眉,我可以使用像這樣的可變狀態。
我只是困惑,如果在將來調用像tranQ是安全的或不使用它。