Java:ConcurrentHashMap

bli*_*egz 2 java

在Java中映射整数和字符串的正确线程安全集合是什么?ConcurrentHashMap是正确的方法吗?

private volatile ConcurrentHashMap<int, bool> chm;
Run Code Online (Sandbox Code Playgroud)

上述声明有什么问题.Eclipse说"令牌上的语法错误"int",此符号后面的维度"

Mat*_*hen 10

这映射Integer到a String.在Java中,泛型必须使用引用类型(Integer,Boolean等),而不是基元(int,boolean等)

private final ConcurrentHashMap<Integer, String> chm;
Run Code Online (Sandbox Code Playgroud)

我不需要是易失性的,除非你不太可能将多个线程中的新地图放入字段中.地图本身将负责同步突变.

  • @Mahatma,你是什么意思设置地图?你在设置字段(chm = ...),还是只调用[put](http://download.oracle.com/javase/6/docs/api/java/util/concurrent/ConcurrentHashMap.html#put% 28K,20V%29%)?你可能只想要第一个的volatile.@Zwei,好建议; 这应该有助于确保它正确使用. (3认同)
  • 我建议使用`private final`.CHM确实处理了它的内部状态,但只有在它正确构造并且线程可见之后.`final`可以保证. (2认同)