Java多线程空指针异常
我正在做这个程序,我一直得到一个NullPointerException,我不知道为什么Java多线程空指针异常,java,multithreading,synchronization,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() {
//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);
}
}
}
//构造函数
公共长任务(SharedResults sharedData、int start、int end)
{
超级(“线程”);
sharedData=this.sharedData;
start=this.start;
结束=这个。结束;
}
//跑
公开募捐{
整数和=0;
对于(int num=start;num您的问题是:
sharedData=this.sharedData;
start = this.start;
end=this.end;
您被分配了方法级变量以获得类级变量的值。这需要另一种方式。按照现在编写的方式,您的共享数据将始终为null
,因为它从未在构造函数中分配。因此,稍后,当您调用
sharedData.addToResult(sum);
您正在调用并试图对空对象引用调用此方法,这解释了您的NullPointerException
如果您需要分配字段变量而不是参数值,则需要以其他方式执行此操作,例如“this.sharedData=sharedData”如果这一部分让您感到困惑,请使用不同的变量名作为参数值。