Java HashMap и синхронизация с ParallelStreamJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Java HashMap и синхронизация с ParallelStream

Сообщение Anonymous »

У меня есть Java HashMap, который обычно читается и изменяется одним потоком. Когда поток записывает данные в эту карту через put, у меня есть следующий фрагмент кода, который проверяет некоторые предварительные условия:

Код: Выделить всё

void put(Set toAdd, long id) {

/// ....

toAdd.forEach(stuff -> {
long prevId = map.getOrDefault(stuff, NO_EXIST)
Preconditions.checkState(prevId < id);
})

/// Update map here
toAdd.forEach(stuff -> {
map.put(stuff, id);
})

/// ...

}
Несмотря на то, что это обычный HashMap, мне было интересно, безопасно ли здесь использовать параллельный поток, чтобы ускорить процесс:

Код: Выделить всё

void put(Set toAdd, long id) {

/// ....

toAdd.parallelStream().forEach(stuff -> {
long prevId = map.getOrDefault(stuff, NO_EXIST)
Preconditions.checkState(prevId < id);
})

/// Update map here
toAdd.forEach(stuff -> {
map.put(stuff, id);
})

/// ...

}
В предыдущих сообщениях я читал, что несколько одновременных операций чтения не должны быть проблемой, и в этом случае карта доступна только вызывающему (одиночному) потоку для внесения изменений, и это будет не произойдет до тех пор, пока не будут проверены предварительные условия. Аналогично, если этот поток захочет выполнить еще один put, никакой другой поток не будет выполнять никаких операций на этой карте. Следовательно, за пределами этого параллельного потока (который содержит только операции чтения) параллельных операций не существует. Есть ли какие-либо последствия для корректности или потенциальные проблемы с видимостью при этом?
Похожий вопрос: безопасность потоков Java hashmap только для чтения

Подробнее здесь: https://stackoverflow.com/questions/735 ... llelstream
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Java ParallelStream с Spring Data JPA
    Anonymous » » в форуме JAVA
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Java ParallelStream Map Misses Records
    Anonymous » » в форуме JAVA
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Метод ParallelStream().forEach() не обрабатывает все данные [закрыто]
    Гость » » в форуме JAVA
    0 Ответы
    6 Просмотры
    Последнее сообщение Гость
  • Почему пулы потоков так значительно медленнее, чем ParallelStream для этого сценария?
    Anonymous » » в форуме JAVA
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Проблема с рейтингом еды LeetCode: изменение, внесенное одним HashMap, не воспринимается другим HashMap
    Anonymous » » в форуме JAVA
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»