имею код:
private final Map<Long, SomeStuff> map = new ConcurrentHashMap<>();
//Called by Thread 1
public void write() {
List list = new ArrayList<>();
for (int i = 0; i <100 ; i++) {
list.add(new Stuff(i))
}
map.put(1L,list)
}
// Called by Thread 2
public void read() {
List list = map.get(1L); // Будет ли лист в консистентном состоянии(кол-во элементов) , будут ли все элементы коллекции безопасно опубликованы
}
Вернет ли map.get(1L) лист в консистентном состоянии(кол-во элементов) , будут ли все элементы коллекции безопасно опубликованы ?
Я спрашиваю, тк в сорсах j.u.c.ConcurrentHashMap put синхронизирован на Node в которую пишет значение
А get идет через Unafe.getObjectVolatile
и я никак не разберу , есть ли между ними HB ребро