You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java多线程环境下访问HashMap触发NullPointerException问题求助

多线程环境下HashMap引发NullPointerException的原因与解决方法

你在多线程环境中使用HashMap时遇到了NullPointerException,报错位置在getData方法的return dataMap.get(key)处。你的代码如下:

import java.util.HashMap;
import java.util.Map;

public class MyMultithreadedProgram 
{
  private Map<String, Integer> dataMap = new HashMap<>();

  public void updateData( String key, int value ) 
  {
    dataMap.put( key, value );
  }

  public int getData( String key ) 
  {
    return dataMap.get( key ); // NullPointerException occurs here
  }

  public static void main( String[] args ) 
  {
    final MyMultithreadedProgram program = new MyMultithreadedProgram();

    // Assume some multithreading scenario here...
    // Thread 1
    new Thread( () -> {
      program.updateData( "A", 42 );
    } ).start();

    // Thread 2
    new Thread( () -> {
      int result = program.getData( "A" ); // NullPointerException happens here
      System.out.println( "Value for key A: " + result );
    } ).start();
  }
}

问题原因

  • HashMap本身不是线程安全的,多线程并发读写时会破坏它的内部数据结构(比如哈希表扩容、节点修改过程),导致读取到未初始化的节点,返回null。
  • getData方法返回的是int基本类型,而HashMap.get()返回的是Integer包装类型,当返回null时,自动拆箱操作会直接抛出NullPointerException。

解决方法

1. 改用线程安全的ConcurrentHashMap

直接替换HashMap为ConcurrentHashMap,它专为多线程并发场景设计,能保证读写操作的线程安全,从根源避免结构不一致问题:

private Map<String, Integer> dataMap = new ConcurrentHashMap<>();

2. 给读写操作加锁

在updateData和getData方法上添加synchronized关键字,确保同一时刻只有一个线程能操作HashMap:

public synchronized void updateData(String key, int value) {
  dataMap.put(key, value);
}

public synchronized int getData(String key) {
  Integer value = dataMap.get(key);
  return value != null ? value : 0; // 可根据业务需求设置默认值
}

也可以使用ReentrantLock等显式锁实现相同效果。

3. 临时避免拆箱NPE(不解决线程安全)

如果暂时无法修改容器或加锁,至少要在getData中先判断返回值是否为null,再进行拆箱:

public int getData(String key) {
  Integer value = dataMap.get(key);
  return value == null ? 0 : value; // 默认值按需调整
}

注意:这个方法只是避免了NPE,但HashMap的线程安全问题依然存在,可能出现数据丢失、脏读等问题,仅作为临时过渡方案。

内容的提问来源于stack exchange,提问作者Hajistha Nakhath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 11:34:56