java – 具有null-key功能的线程安全映射

我需要一个多线程Map对象用于我的Web服务器的缓存,我需要有空键.

HashMap允许我使用null键,但ConcurrentHashMap不允许.我尝试使用Collections.synchronizedMap(new HashMap())创建HashMap的同步版本,但它也不接受null键.

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

解决方法:

Collections.synchronizedMap返回的地图支持您提供的地图的所有功能.如果你给它一个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);
    }
}

输出:

Size = 1
Size = 2
map.get(null) = b
上一篇:保持JavaScript和CSS同步的实践?


下一篇:如果只有一个编写器线程,我们是否需要同步java HashMap获取