现在我有一个名为words的HashMap和一个扩展Thread类的Producer类。
我有一个类似的for循环:
for (int i = 0; i < 10; i++) {
Producer producer = new Producer(i);
producer.run();
}
我想让每个制作人在HashMap词中添加一些单词。如果我只是把HashMap&lt; ...&gt;关于for(int ....)语句的话?
不是,我该怎么做才能实现这个目标?
答案 0 :(得分:1)
我担心你没有准确地指出这个问题,以便得到回答。
如果我只是在
HashMap<...>
语句中添加for (int....)
字词,它是否有效?
几乎可以;也就是说,它确实会创建一个新的哈希映射(前提是“单词”是正确的)。它不会做的是它不会确保地图是同步的。正如@Thilo在上面的评论中所说,有两种简单的方法可以做到:
可以在What's the difference between ConcurrentHashMap and Collections.synchronizedMap(Map)?
找到方法的优缺点(以及更多方法)答案 1 :(得分:0)
ConcurrentHashMap与HashMap类非常相似,只是ConcurrentHashMap提供了内部维护的并发性。这意味着在多线程应用程序中访问ConcurrentHashMap时不需要具有同步块。
//Initialize ConcurrentHashMap instance
ConcurrentHashMap<String, Integer> m = new ConcurrentHashMap<String, Integer>();
//Print all values stored in ConcurrentHashMap instance
for each (Entry<String, Integer> e : m.entrySet())
{
system.out.println(e.getKey()+"="+e.getValue());
}
以上代码在您的应用程序的多线程环境中相当有效。我说“合理有效”的原因是,上面的代码还提供了线程安全性,但仍然会降低应用程序的性能。引入ConcurrentHashMap是为了在确保线程安全的同时提高性能。
为了提高性能,您可以根据需要调整以下参数:
参数:initialCapacity
loadFactor