@bakomchik

Будет ли ArrayList прочитан в консистентном состоянии в j.u.c.ConcurrentHashMap?

имею код:
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 ребро
  • Вопрос задан
  • 279 просмотров
Пригласить эксперта
Ответы на вопрос 1
Да. Это гарантируется интерфейсом ConcurrentMap.

Memory consistency effects: As with other concurrent collections, actions in a thread prior to placing an object into a ConcurrentMap as a key or value happen-before actions subsequent to the access or removal of that object from the ConcurrentMap in another thread.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
29 мар. 2024, в 13:20
3000 руб./за проект
29 мар. 2024, в 12:59
15000 руб./за проект
29 мар. 2024, в 12:56
1500 руб./за проект