hashmap中的线程问题

时间:2014-06-19 17:07:46

标签: java multithreading

我使用两个线程将值放在同一个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)

2 个答案:

答案 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来救援。