使用 thread.join() 时抛出 NullPointerException [duplicate]

NullPointerException is thrown when thread.join() is used [duplicate]

提问人:kaptrow 提问时间:7/16/2019 更新时间:7/16/2019 访问量:236

问:

我创建了一个用于矩阵乘法的类,它实现了 Runnable 接口。它有一个线程数组,这些线程都已初始化,并且为了确保在返回矩阵之前完成所有计算,我对相同的线程数组使用了 for each 循环,并且在尝试加入第一个线程时立即触发了 NullpointerException。线程对象在完成该过程后会变成 null 吗?

我添加了一个 if 子句来检查线程是否为 null,它解决了问题,但我没有发现任何迹象表明线程对象在完成后变为 null。

Thread[] threads = new Thread[amountOfThreads];
for (Thread thread : threads) {
    thread = new Thread(this);
    thread.start();
}
for (Thread thread : threads) {
    thread.join();
}

Java 多线程 NullPointerException

评论

1赞 Ivar 7/16/2019
长话短说:为数组赋值。循环后,数组仍将仅包含值。thread = new Thread(this)null

答:

0赞 Hossein Nasr 7/16/2019 #1

您需要将创建的线程添加到数组中。喜欢这个

Thread[] threads = new Thread[amountOfThreads];
int i=0;
for (Thread thread : threads) {
    thread = new Thread(this);
    thread.start();
    threads[i++] = thread;
}
for (Thread thread : threads) {
    thread.join();
}