Je suis un peu confus si je suis en train de muter en toute sécurité mes cartes/mappes mutables à l'intérieur de mon acteur. Est-ce que quelqu'un peut me dire si ce code est thread-sûr et correct?Suis-je en train de muter en toute sécurité dans mes acteurs akka ou n'est-ce pas thread safe?
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
}
}
}
Puisque je mute le tranQ avec des contrats à terme, est-ce sûr? Je crois comprendre que chaque message d'acteur est géré de manière sérielle, donc, même si je suis peut-être mal vu, je peux utiliser un état mutable comme celui-ci.
Je suis juste confus si l'utiliser à l'intérieur d'un appel futur comme tranQ est sûr ou pas.