具有零键功能的线程安全映射

Ira*_*chi 5 java synchronization hashmap concurrenthashmap

我需要一个多线程Map对象来在我的Web服务器的缓存中使用,我需要有null密钥.

HashMap允许我有空键,但ConcurrentHashMap没有.我试图创建一个HashMap使用的同步版本,Collections.synchronizedMap(new HashMap())但它也不接受null密钥.

有没有我可以使用的替代方案,而不必实现某种方式来包装null密钥?

T.J*_*der 7

Map由归国Collections.synchronizedMap支持所有的功能Map,你给它.如果你给它一个HashMap,它支持null键(以及null值,你说"......我需要"空"键值......"可以任何方式读取).是什么让你觉得它没有?

这可以按预期工作,例如:

import java.util.*;

public class MapTest
{
    public static final void main(String[] args)
    {
        Map map;

        try
        {
            map = Collections.synchronizedMap(new HashMap());
            map.put("one", "a");
            System.out.println("Size = " + map.size());
            map.put(null, "b");
            System.out.println("Size = " + map.size());
            System.out.println("map.get(null) = " + map.get(null));
        }
        catch (Exception ex)
        {
            System.out.println("Exception: " + ex.getMessage());
            ex.printStackTrace(System.out);
        }
        System.exit(0);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

Size = 1
Size = 2
map.get(null) = b