Thread 1: Call list.add()
Thread 1: Exits list.add()
Thread 2: Call list.get(list.size()-1)
У меня есть сценарий, где я могу гарантировать, что Thread 1
завершит вызов add() до Thread 2
, сделав вызов get(). Будет ли Thread 2
всегда видеть изменения, сделанные Thread 1
в этом случае? Или внутренние переменные ArrayList должны быть отмечены как изменчивые?
Изменить: Для тех, кому интересно, почему я могу это гарантировать. У меня есть последовательность событий с сервера, которые выглядят следующим образом:
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