Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么c对象在run方法中为null?_Java_Multithreading_Nullpointerexception - Fatal编程技术网

Java 为什么c对象在run方法中为null?

Java 为什么c对象在run方法中为null?,java,multithreading,nullpointerexception,Java,Multithreading,Nullpointerexception,我正在解决下面的面试问题。它抛出了一个NullPointerException,但我不理解c的值是如何为null的。我已经在go方法中初始化了它 创建如下线程时: new Thread(new JavaInterviewHub()).start(); 创建了JavaInterviewHub的一个新实例。在这个实例中,c没有设置在任何地方,因此当执行run方法时,会抛出一个NullPointerException 解决这个问题的一种方法是在JavaInterviewHub的构造函数中初始化c。另

我正在解决下面的面试问题。它抛出了一个NullPointerException,但我不理解c的值是如何为null的。我已经在go方法中初始化了它


创建如下线程时:

new Thread(new JavaInterviewHub()).start();
创建了JavaInterviewHub的一个新实例。在这个实例中,c没有设置在任何地方,因此当执行run方法时,会抛出一个NullPointerException

解决这个问题的一种方法是在JavaInterviewHub的构造函数中初始化c。另一种方法是在声明的地方初始化c。有关更多信息,请参阅答案。

由于Chicks.yack是同步的,您可能希望两个线程使用相同的Chicks实例,这意味着您可能希望两个线程使用相同的JavaInterviewHub实例,在这种情况下,您可能想用在main中创建的实例启动两个线程

如果这都是真的,那么在创建线程时需要使用:

void go(){
    c=new Chicks();
    new Thread(this).start();
    new Thread(this).start();
}
至于何时创建Chicks实例并因此为c赋值的问题,您有3种选择:

保持代码不变。有点模糊,但有效。 在构造函数中执行此操作。 在声明c时执行此操作。最简单的。 选项2:构造函数

private JavaInterviewHub() {
    this.c = new Chicks();
}
备选案文3:声明

private final Chicks c = new Chicks();

JavaInterviewHub的每个实例都有自己的c字段?new Threadnew JavaInterviewHub.start;-此处创建的JavaInterviewHub没有初始化其c字段。@immibis您能简要解释一下此处发生了什么吗?如果您这样做,那么您总共有3个JavaInterviewHub和Chicks实例,程序创建多个JavaInterviewHub实例的原因并不是因为它创建了这样的新线程。。。这是因为新的JavaInterviewHub。我知道这是你们所说的大部分,但这些新手需要很多的帮助。当你创建一个新的线程时,如果创建线程不是问题的话,不要说这会让他们感到困惑。
private JavaInterviewHub() {
    this.c = new Chicks();
}
private final Chicks c = new Chicks();