Java ArrayList - 来自一个线程的add()调用是否总是可以从另一个线程读取?
2022-09-03 15:30:35
Thread 1: Call list.add()
Thread 1: Exits list.add()
Thread 2: Call list.get(list.size()-1)
我有一个场景,我可以保证在进行get()调用之前将完成add()调用。在这种情况下,将始终看到 所做的更改?或者内部 ArrayList 变量是否需要标记为易失性?Thread 1
Thread 2
Thread 2
Thread 1
编辑:对于那些好奇为什么我可以保证它的人。我有一个来自服务器的一系列事件,如下所示:
Event A1
Event A2
Event A3
Event B
事件由单个线程按顺序调度。我想捕获所有事件的列表,所以我的代码看起来像这样:A
List<EventA> eventAList = new ArrayList<>();
connection.addListenerForEventAs(eventAList::add);
connection.waitForEventB();
//Here I am doing operations on the eventAList