gpt4 book ai didi

java - 为什么线程无法更新ArrayList字段?

转载 作者:行者123 更新时间:2023-12-01 11:06:10 25 4
gpt4 key购买 nike

我的结构如下:

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

}

在没有线程的情况下传递对象时,会进行更改。但即使在使字段Volatile之后,更改也不会反射(reflect)出来。

1) 上面的代码有什么问题?2)遵循这种方法可以吗?3)完成此类工作的一般方法是什么?

我对多线程非常陌生。

最佳答案

如果您有一个执行某些任务的 Thread 对象并且您想查看结果,请等待其终止。

 Thread p = new Thread(new Runnable(){
//...
}); // no start here
p.start(); // let it run
p.join(); // wait for its end

执行另一个线程并没有什么好处,而启动线程除了等待启动线程结束之外没有什么更好的事情可做。

关于java - 为什么线程无法更新ArrayList字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32924647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com