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

如何在线程run()方法中更新类属性?解决空指针异常

解决Thread子类中List属性空指针异常的方案

异常原因

抛出java.lang.NullPointerException是因为你只声明了processedList这个List类型的属性,但从未对它进行初始化,调用add()方法时它的值还是null。

具体解决方法

1. 声明属性时直接初始化

推荐使用线程安全的List实现(因为你继承了Thread,大概率是多线程场景),比如CopyOnWriteArrayList,它天生支持并发添加操作,同时配合volatile保证可见性:

public class ClassProcessing extends Thread {
    // 直接初始化线程安全的List
    volatile public List<String> processedList = new CopyOnWriteArrayList<>();
    
    @Override
    public void run() {
        String processedElement = "..."; // 你的计算逻辑
        this.processedList.add(processedElement);
    }
}

2. 在构造函数中初始化

如果需要根据不同场景选择List实现,可以在构造函数里完成初始化:

public class ClassProcessing extends Thread {
    volatile public List<String> processedList ;

    public ClassProcessing() {
        // 多线程场景用线程安全实现
        this.processedList = new CopyOnWriteArrayList<>();
        // 单线程场景可使用普通ArrayList(不推荐在多线程环境下用)
        // this.processedList = new ArrayList<>();
    }

    @Override
    public void run() {
        String processedElement = "..."; // 你的计算逻辑
        this.processedList.add(processedElement);
    }
}

额外注意事项

volatile关键字仅保证processedList变量本身的可见性,但无法保证List内部操作的线程安全。如果你的场景是多线程并发修改这个List,必须使用线程安全的List实现,避免出现ConcurrentModificationException或者数据不一致的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 09:40:25