-2

基本的にHashMap、オブジェクトの名前に基づいてオブジェクトをキーとして保存しようとする があります。ただし、オブジェクトがまだ にない場合は、HashMapme anullを返す代わりに を返しますobject。その結果、新しいオブジェクトを作成して作成したり、HashMapそれをnull.

これは私のコードです...

private static Map<String, SObj> MComponentCache = Collections.synchronizedMap(new HashMap<String, Sobj>());

    static SObj getSObj(String cName) {
        SObj cmp = null;
        String pKey = "Component:" + cName.intern();
        cmp = MComponentCache.get(cName);
        synchronized (pKey){
            if (cmp == null){
                cmp = new SObj(cName);
                MComponentCache.put(cName, cmp);
            }
        }
        return cmp;
    }

誰でもこれを修正するのを手伝ってくれませんか。

4

1 に答える 1

0

コードが正しくありません。キーは新しく構築されたローカル オブジェクトであり、同期されたマップは操作間でアトミックではないため、キーの同期は無意味です。get()と の両方の操作を含むブロック内のマップで同期する必要がありますput()

于 2012-06-07T01:42:21.430 に答える