私はウェブアプリケーションを持っています。tomcat呼び出しを処理する複数のスレッドで実行されていServletます。
Userクラス、クラスAccount、および 1AccountContext` クラスがあります。
Accounts複数持つことができますUsers。
ごとにのインスタンスを 1 つだけAccountContextメモリに保持する必要がありますAccount。
ユーザーがサーブレット経由でログイン呼び出しを行った場合: が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;
}