Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: HashMap на чтение несколькими потоками  [new]
questioner
Member

Откуда:
Сообщений: 1865
Lelouch
questioner,

В вашем примере put и get выполняются без синхронизации (1е чтение) и именно поэтому при вызове .get мы можем получить что угодно. Поэтому этот пример и не работает. Упоминание LinkedHashMap полезено только с точки зрения того, что без исходников мы не можем сказать, изменяет ли состояние вызов метода.


А может в новой версии джавы что-то поменяется...

А зачем вообще думать о том о чем не надо думать? это такой вид онанизма?

Doug Lea(тоже не самый последний дядька если что) вообще рекомендует использовать CHM вместо HM ибо ничего ты на этом не потеряешь
3 окт 19, 01:20    [21985484]     Ответить | Цитировать Сообщить модератору
 Re: HashMap на чтение несколькими потоками  [new]
questioner
Member

Откуда:
Сообщений: 1865
Brian Goetz
HashMap is not thread-safe. Bam, end of story.


ВСЁ. дальше даже думать не надо ни о чем
3 окт 19, 01:23    [21985485]     Ответить | Цитировать Сообщить модератору
 Re: HashMap на чтение несколькими потоками  [new]
Lelouch
Member

Откуда: Москва
Сообщений: 1782
questioner
Lelouch
questioner,

В вашем примере put и get выполняются без синхронизации (1е чтение) и именно поэтому при вызове .get мы можем получить что угодно. Поэтому этот пример и не работает. Упоминание LinkedHashMap полезено только с точки зрения того, что без исходников мы не можем сказать, изменяет ли состояние вызов метода.


А может в новой версии джавы что-то поменяется...

А зачем вообще думать о том о чем не надо думать? это такой вид онанизма?

Doug Lea(тоже не самый последний дядька если что) вообще рекомендует использовать CHM вместо HM ибо ничего ты на этом не потеряешь


Ну меня тут интересует именно спортивный интерес про jmm. С практической точки зрения я бы тоже thread safe реализацию бы использовал.
3 окт 19, 01:26    [21985486]     Ответить | Цитировать Сообщить модератору
 Re: HashMap на чтение несколькими потоками  [new]
questioner
Member

Откуда:
Сообщений: 1865
Lelouch
questioner
пропущено...


А может в новой версии джавы что-то поменяется...

А зачем вообще думать о том о чем не надо думать? это такой вид онанизма?

Doug Lea(тоже не самый последний дядька если что) вообще рекомендует использовать CHM вместо HM ибо ничего ты на этом не потеряешь


Ну меня тут интересует именно спортивный интерес про jmm. С практической точки зрения я бы тоже thread safe реализацию бы использовал.


Потом же захочется в продакшене то свои знания применить... и порядок добавления будет нужен и поменяется имплементация мапы и всё свалится....
3 окт 19, 01:30    [21985488]     Ответить | Цитировать Сообщить модератору
 Re: HashMap на чтение несколькими потоками  [new]
Lelouch
Member

Откуда: Москва
Сообщений: 1782
questioner
Lelouch
пропущено...


Ну меня тут интересует именно спортивный интерес про jmm. С практической точки зрения я бы тоже thread safe реализацию бы использовал.


Потом же захочется в продакшене то свои знания применить... и порядок добавления будет нужен и поменяется имплементация мапы и всё свалится....


В моем случае нет, мне приходилось отлаживать гонки, так что я лучше перестрахуюсь:)
3 окт 19, 01:36    [21985490]     Ответить | Цитировать Сообщить модератору
 Re: HashMap на чтение несколькими потоками  [new]
questioner
Member

Откуда:
Сообщений: 1865
Lelouch

В моем случае нет, мне приходилось отлаживать гонки, так что я лучше перестрахуюсь:)


Вообще я отвечаю на вопрос на ТСа)
3 окт 19, 08:07    [21985524]     Ответить | Цитировать Сообщить модератору
 Re: HashMap на чтение несколькими потоками  [new]
rabiter
Member

Откуда: SPb
Сообщений: 632
Вооооот! Я же говорю, мы не знаем что там внутри HashMap на чтение (вдруг там правда какие-то внутренние рычаги дергаются которые меняют state). Или, все верно, в следующих версиях что поменяется. Вообщем чисто теоретически. Поменяю-ка я на ConcurrentHashMap. Котелок-то варит еще, почувствовал неладное и пошел сюда!
3 окт 19, 14:42    [21985908]     Ответить | Цитировать Сообщить модератору
 Re: HashMap на чтение несколькими потоками  [new]
rabiter
Member

Откуда: SPb
Сообщений: 632
rabiter
Вооооот! Я же говорю, мы не знаем что там внутри HashMap на чтение (вдруг там правда какие-то внутренние рычаги дергаются которые меняют state). Или, все верно, в следующих версиях что поменяется. Вообщем чисто теоретически. Поменяю-ка я на ConcurrentHashMap. Котелок-то варит еще, почувствовал неладное и пошел сюда!


Кстати, для собеседования норм может быть задачка, спросить про такой пример с HashMap на чтение и посмотреть как кандидат поразмышляет (ну если вообще про многопоточку спрашивать).
3 окт 19, 14:43    [21985910]     Ответить | Цитировать Сообщить модератору
 Re: HashMap на чтение несколькими потоками  [new]
chpasha
Member

Откуда:
Сообщений: 8446
rabiter
Я же говорю, мы не знаем что там внутри HashMap на чтение

для этого существует документация. если в ней написано, что класс не потокобезопасен, значит так оно и есть. конкретно по HashMap написано дословно

дока oracle по java 8
Note that this implementation is not synchronized. If multiple threads access a hash map concurrently, and at least one of the threads modifies the map structurally, it must be synchronized externally


про LinkedHashMap дока говорит следующее:
автор
In access-ordered linked hash maps, merely querying the map with get is a structural modification.

соответственно то, о чем пишет товарищ Götz касается особой разновидности LinkedHashMap созданной с помощью соотв. конструктора в чем можно убедится в исходнике

 public LinkedHashMap(int initialCapacity,
                         float loadFactor,
                         boolean accessOrder) {
        super(initialCapacity, loadFactor);
       this.accessOrder = accessOrder;
    }

public V get(Object key) {
        Node<K,V> e;
        if ((e = getNode(hash(key), key)) == null)
            return null;
        if (accessOrder)
            afterNodeAccess(e);
        return e.value;
    }


т.е. нет никакого противоречия - HashMap.get не вызывает структурных изменений, LinkedHashMap - вызывает.

rabiter
вдруг там правда какие-то внутренние рычаги дергаются которые меняют state

а вдруг в Math.random тоже какие-то внутренние рычаги дергаются которые меняют state не смотря на то, что дока утверждает обратное? А вдруг он станет потоконебезопасен в 20й версии явы?

rabiter
Поменяю-ка я на ConcurrentHashMap
это другое дело - если существует специальная потокобезопасная версия того же самого, то нет причин ее игнорировать.
3 окт 19, 15:08    [21985945]     Ответить | Цитировать Сообщить модератору
 Re: HashMap на чтение несколькими потоками  [new]
забыл ник
Member

Откуда:
Сообщений: 3024
chpasha

rabiter
Поменяю-ка я на ConcurrentHashMap
это другое дело - если существует специальная потокобезопасная версия того же самого, то нет причин ее игнорировать.


Возвращаемся к вопросу о том как эта мапа будет использоваться. Операции size и empty могут выдавать немного то что хотелось бы(зависит от юскейса) - в данном случае это ок
3 окт 19, 15:22    [21985954]     Ответить | Цитировать Сообщить модератору
 Re: HashMap на чтение несколькими потоками  [new]
questioner
Member

Откуда:
Сообщений: 1865
rabiter
rabiter
Вооооот! Я же говорю, мы не знаем что там внутри HashMap на чтение (вдруг там правда какие-то внутренние рычаги дергаются которые меняют state). Или, все верно, в следующих версиях что поменяется. Вообщем чисто теоретически. Поменяю-ка я на ConcurrentHashMap. Котелок-то варит еще, почувствовал неладное и пошел сюда!


Кстати, для собеседования норм может быть задачка, спросить про такой пример с HashMap на чтение и посмотреть как кандидат поразмышляет (ну если вообще про многопоточку спрашивать).


Обычно нужно найти человека, который решает проблемы, а не ищет себе проблемы там, где их и нет.
3 окт 19, 15:40    [21985970]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Java Ответить