我的应用程序有一个ApplicationUsers
没有可变成员的类。创建实例后,它将整个用户数据库(相对较小)读入一个不可变集合。它有多种查询数据的方法。
我现在面临着必须创建新用户(或修改他们的一些属性)的问题。我目前的想法是使用一个 Akka 演员,在高层次上,它看起来像这样:
class UserActor extends Actor{
var users = new ApplicationUsers
def receive = {
case GetUsers => sender ! users
case SomeMutableOperation => {
PerformTheChangeOnTheDatabase() // does not alter users (which is immutable)
users = new ApplicationUsers // reads the database from scratch into a new immutable instance
}
}
}
这安全吗?我的理由是它应该是:任何其他线程使用以前的实例进行users
更改时已经拥有旧版本的句柄,并且不应该受到影响。此外,在未安全构建新实例之前,不会对任何请求进行操作。SomeMutableOperation
users
GetUsers
有什么我想念的吗?我的构造安全吗?
更新:我可能应该使用代理来执行此操作,但问题仍然存在:上述安全吗?