私は、アプリケーションの実行中に情報を格納するために使用されるプライベート静的マップを持つJavaクラスを持っています。キー/値をマップに一度だけ入れても、マップの値は何度も読み取られることがあります。Javaでスレッドセーフな追記型多値マップを作成するにはどうすればよいですか?
私は今それを持っているので、コードはgetとnullをチェックします。 nullの場合は、必要なデータを集めてマップに配置します。その後のクライアントコードによる呼び出しは、マップから値を取得することが保証されます。クライアントはヌルチェックを行う必要はありません。
これは、データを地図に入れるのはコストがかかるため、キーごとに1回しか実行したくないからです。
このパターンはありますか?私は、この状況について議論する何かを見つけることができないようです。あなたが保存して同期取得に必要なすべてを提供します
public class TestWorm {
private static Map<String, Object> map = new HashMap<String, Object>(32);
public Object getValue(String key) {
if (map.get(key) != null) {
return map.get(key);
}
// do some process to get Object
Object o = new Object();
map.put(key, o);
return o;
}
}
get()を実行すると、一度だけ行う必要があります。 ;) –
@sprokeyboy:あなたが必要としているのはまさにGuavaの[LoadingCache](http://code.google.com/p/guava-libraries/wiki/CachesExplained)です。 – maaartinus