Следующий код компилирует, но приводит к исключению нулевого указателя во время выполнения. Мое лучшее предположение: outputInts не «видимо» для каждого потока и поэтому не может быть записано.В java, как я могу получить возвращаемое значение из потока?
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() method returning a value, по-видимому, предполагают, что я могу запускать несколько потоков с помощью вызываемого, где мне может понадобиться где-то в области тысячи потоков.
Я ищу помощь в получении либо выше осуществления на работу или термины руководства непрофессионала к тому, как это может быть достигнуто с отзывным
«регион из тысячи нитей». Overkill. – hexafraction
'ArrayList' ??? Вы не можете передавать примитивный тип в generics, только типы объектов. –
gparyani
Вы должны распечатать и опубликовать трассировку стека. Я предполагаю, что проблема заключается в том, что вы не используете потокобезопасную коллекцию. – samlewis