我有一个网络应用程序。tomcat
在多个线程上运行并为Servlet
调用提供服务。
我有一个User
类、一个Account
类和一个 1AccountContext` 类。
Accounts
可以有多个Users
.
每个. AccountContext
_Account
当用户通过 servlet 进行登录调用时:如果AccountContext
存在,则返回。否则,初始化它。
下面是我为初始化上下文而编写的代码。这段代码看起来是否会在线程安全的同时执行我想要的操作?
ACCOUNT_CONTEXT_MAP
是一个ConcurrentHashMap
。
public static AccountContext getAccountContext(Account account) {
AccountContext accountContext = ACCOUNT_CONTEXT_MAP.get(account);
if(accountContext == null){
synchronized(account){
if(ACCOUNT_CONTEXT_MAP.get(account) == null)
accountContext = new AccountContext(account);
//Creating the AccountContext is expensive,
//i'd like it if it was only done once.
ACCOUNT_CONTEXT_MAP.put(account,accountContext);
}else{
accountContext = ACCOUNT_CONTEXT_MAP.get(account);
}
}
}
return accountContext;
}