以下代码编译但在运行时导致空指针异常。我最好的猜测是 outputInts 对每个线程都不“可见”,因此无法写入。
public class myClass{
ArrayList<int> outputints
public void foo(int start, int end) {
for (int i = start; i <= end; i++) {
bar(i);
}
private void bar(int i) {
class OneShotTask implements Runnable {
int i;
OneShotTask(int j) {
i = j;
}
@Override
public void run() {
try {
System.out.println(i);
outputints.add(i); //null pointer exception caused here
}
} catch (Exception e) {
System.out.println(e.toString());
}
}
}
Thread t = new Thread(new OneShotTask(j));
t.start();
}
}
我读过我应该使用可调用来实现这一点,但我不明白这是如何实现的。此外,返回值的 java Runnable run() 方法之类的示例似乎表明我可以使用可调用对象运行少数线程,而我可能需要在一千个线程区域的某个地方。
我正在寻求帮助以使上述实现工作或外行的术语指南,以了解如何通过可调用来实现