gpt4 book ai didi

java - 线程中的 NullPointerException

转载 作者:行者123 更新时间:2023-11-29 06:33:27 25 4
gpt4 key购买 nike

为什么我在这里得到 NullPointerException

package Threads;

public class Test implements Runnable {

FF d;

public static void main(String[] args) {

new Test().go();

}

void go() {

System.out.println(Thread.currentThread());
d = new FF();
new Thread(new Test()).start();
new Thread(new Test()).start();
}

public void run() {

System.out.println(d);
System.out.println(Thread.currentThread());
d.chat(Thread.currentThread().getId());//RTE
}

}

class FF {

static long flag = 0;

void chat(long id) {

if(flag == 0) {

flag = id;

}
for(int x=1;x<3;x++) {

if(flag == id) {

System.out.println("Yo");

}else {

System.out.println("dude");

}
}
}
}

//谁能解释为什么我在这里得到 NullPointerException。我虽然 d 引用变量是在 go() 方法中初始化的,但我认为它有一些事情要做新线程已创建。

最佳答案

d 是类 Test 的实例字段。为 Test 的一个实例初始化它不会使其为随后创建的所有实例初始化。您已经在 main 中创建的实例的 go 方法中初始化了该字段。但在那之后,您创建了Test 实例,它们的字段尚未初始化:

new Thread(new Test()).start();   // d is not initialized for the new Test() object
new Thread(new Test()).start();

一种解决方案是在构造函数中初始化字段:

public Test() {
d = new FF();
}

关于java - 线程中的 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26593451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com