Java多线程空指针异常

时间:2015-04-25 15:20:20

标签: java multithreading synchronization

我正在处理这个程序,并且我一直收到NullPointerException,我不知道为什么。

//Constructor

public LongTask(SharedResults sharedData,int start, int end)
{
    super("Thread");
    sharedData=this.sharedData;
    start = this.start;
    end=this.end;

}

//Run

public void run() {
    int sum = 0;
    for (int num = start; num<=end;num++)
            {
        sum+=num;

        try {
            Thread.sleep((long)(5000*Math.random()));
            }

            catch (InterruptedException e)
            {}
        sharedData.addToResult(sum);
        }
}
}

我最终收到NullPointerException错误。看起来我的数据没有正确汇总。

1 个答案:

答案 0 :(得分:4)

你的问题是:

sharedData=this.sharedData;
start = this.start;
end=this.end;

为您分配方法级别变量以具有类级别变量的值。这需要反过来。现在它的编写方式,您的SharedData始终为null,因为它永远不会在构造函数中分配。所以稍后,当你打电话

 sharedData.addToResult(sum);

您正在调用尝试在空对象引用上调用此方法,这解释了您的NullPointerException