有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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)

共 (2) 个答案

  1. # 1 楼答案

    @Dylan是正确的,简短的回答是,您永远不应该在并发环境中使用HashMaps。幸运的是,java。util。同时发生的我们需要一张救援地图

  2. # 2 楼答案

    有两种解决方案

    1)使用java。util。ConcurrentHashMap,设计用于在线程环境中运行

    2)同步hashmap。Java允许在对象上进行同步,因此可以确保一次只有一个线程接触对象

    synchronized(map) {
        map.put("important", "stuff");
    }
    

    方法#2不是多线程的首选解决方案(CuncurrentHashMap是),但如果无法更改变量的类型(如在大型项目中),它是您唯一的选择