我使用两个线程将值放在同一个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)
答案 0 :(得分:3)
有两种解决方案
1)使用java.util.ConcurrentHashMap,它设计用于在线程环境中运行。
2)同步hashmap。 Java允许您在对象上进行同步,因此您可以确保一次只有一个线程触及对象。
离。
synchronized(map) {
map.put("important", "stuff");
}
方法#2不是多线程的首选解决方案(CuncurrentHashMap是),但如果你不能改变变量的类型(就像在大型项目中那样),那么它是你唯一的选择。
答案 1 :(得分:2)
@Dylan是正确的,简短的回答是你不应该在并发环境中使用HashMaps。幸运的是,java.util.concurrent.ConcurrentHashMap来救援。