Моя структура выглядит следующим образом:Почему поток не может обновить поле ArrayList?
public class ReadCSV {
volatile List<FlightDetails> detail;
main() {
ReadCSV obj=new ReadCSV();
obj.detail=Collections.synchronizedList(new ArrayList<FlightDetails>());
new Thread(new Runnable(){
@Override
public void run() {
try {
...
//pass the object along
readAndParseFile("someFile.csv",obj);
} catch (IOException e) {
...
}
// prints Alright
System.out.println(obj.detail.get(0).getDep_loc());
}
}).start();
// Throws AIOB Exception
System.out.println(obj.detail.get(0).getArr_loc());
}
static void readAndParseFile(String csvFileName, ReadCSV obj) {
...
..
//make changes to the object
obj.detail.add()
// works fine
}
При прохождении объекта без резьбы, изменения made.But изменения не отражаются даже после создания поля Volatile
.
1) что не так в приведенном выше коде? 2) Можно ли следовать этому подходу? 3) Каков общий способ выполнения таких заданий?
Я очень новичок в многопоточности.
Вы просите кого-то еще, чтобы собрать некоторые элементы из библиотеки в корзину в вашей двери. ['start'] Пока кто-то уходит [' run'], вы смотрите в корзину ['println']: ничего нет, и вы раздражены. Разумно? Нет. Вы должны ждать возвращения вашего помощника ... – laune
Другими словами, возможно, новая нить на самом деле ничего не помещала в список. Подожди немного. – NickJ