hashmap中的java线程问题
我使用两个线程将值放在同一个hashmap中。线程1将读取存储在映射中的值,线程2将仅读取存储在映射中的值
在这方面,我得到了NullPointerException
。这是因为线程问题吗
HashMap map = new HashMap();
Thread1:
map.put(1,1);
map.put(2,2);
map.get(1).toString(); // here null pointer i am getting.. Is it possible due to threading issue..
Thread 2:
map.put(4,4);
map.put(5,5)
# 1 楼答案
@Dylan是正确的,简短的回答是,您永远不应该在并发环境中使用HashMaps。幸运的是,java。util。同时发生的我们需要一张救援地图
# 2 楼答案
有两种解决方案
1)使用java。util。ConcurrentHashMap,设计用于在线程环境中运行
2)同步hashmap。Java允许在对象上进行同步,因此可以确保一次只有一个线程接触对象
前
方法#2不是多线程的首选解决方案(CuncurrentHashMap是),但如果无法更改变量的类型(如在大型项目中),它是您唯一的选择