|
|
|
Что будет если использовать HashMap в многопоточной среде?
|
|||
|---|---|---|---|
|
#18+
Все знают, что в многопоточной среде нужно использовать синхронизованные коллекции. Меня тут спросили, а что будет если использовать обычную хеш мапу? Вот тут я подзавис. Я так понимаю, что если будет например один поток вставлять в мапу значение, которое приведет к удвоению всей мапы(лоад фактор превышен), а другой читать в момент удвоения, то произойти что-то плохое, а вот что конкретно - не очень понимаю. Можете прояснить вопрос? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2017, 20:25 |
|
||
|
Что будет если использовать HashMap в многопоточной среде?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2017, 20:36 |
|
||
|
Что будет если использовать HashMap в многопоточной среде?
|
|||
|---|---|---|---|
|
#18+
questionerВсе знают, что в многопоточной среде нужно использовать синхронизованные коллекции. Меня тут спросили, а что будет если использовать обычную хеш мапу? Непредсказуемое поведение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2017, 23:09 |
|
||
|
Что будет если использовать HashMap в многопоточной среде?
|
|||
|---|---|---|---|
|
#18+
забыл никquestionerВсе знают, что в многопоточной среде нужно использовать синхронизованные коллекции. Меня тут спросили, а что будет если использовать обычную хеш мапу? Непредсказуемое поведение. Что-то подобное я конечно сказал, но от меня хотели конкретики ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2017, 23:10 |
|
||
|
Что будет если использовать HashMap в многопоточной среде?
|
|||
|---|---|---|---|
|
#18+
Null pointer exception ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2017, 23:18 |
|
||
|
Что будет если использовать HashMap в многопоточной среде?
|
|||
|---|---|---|---|
|
#18+
Petro123questioner, поиск делали? http://begoml.by/hashmap-and-multithreading/ Код: java 1. 2. 3. 4. 5. 6. 7. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Не понял как параллельное исполнение этих участков кода приведет к циклической ссылке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2017, 23:22 |
|
||
|
Что будет если использовать HashMap в многопоточной среде?
|
|||
|---|---|---|---|
|
#18+
но это видимо общеизвестный факт http://stackoverflow.com/a/11050613/2674303 The get() goes to an infinite loop because one of the threads has only a partially updated view of the HashMap in memory and there must be some sort of pointer loop. That's the peril of using an unsynchronized collection with multiple threads. но конкретика мне не понятна( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2017, 23:25 |
|
||
|
Что будет если использовать HashMap в многопоточной среде?
|
|||
|---|---|---|---|
|
#18+
Многопотоковое выполнение get втряд ли что-то может порушить. Т.ч. режим read only (только get) полностью безопасен. А вот если какой-то поток меняет данные - то тут уж кранты. Я, все же, думаю, что ошибка будет null pointer exception ))) хотя и an infinite loop тоже достаточно приятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2017, 23:37 |
|
||
|
Что будет если использовать HashMap в многопоточной среде?
|
|||
|---|---|---|---|
|
#18+
questionerзабыл никпропущено... Непредсказуемое поведение. Что-то подобное я конечно сказал, но от меня хотели конкретики "Непредсказуемое поведение" это очень даже конкретика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2017, 07:25 |
|
||
|
Что будет если использовать HashMap в многопоточной среде?
|
|||
|---|---|---|---|
|
#18+
Alexey Tomin"Непредсказуемое поведение" это очень даже конкретика. Я бы обозвал скорее "недетерминированным". Предсказать-то можно попробовать. Но то как именно оно будет работать однозначно сказать нельзя, потому что в зависимости от реализации эффекты от использования в многопоточной среде могут быть любыми. Очень странный и глупый вопрос как для собеседования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2017, 08:26 |
|
||
|
Что будет если использовать HashMap в многопоточной среде?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Пытаться понять почему get() может уйти в бесконечный цикл считаете нецелесообразным? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2017, 11:35 |
|
||
|
Что будет если использовать HashMap в многопоточной среде?
|
|||
|---|---|---|---|
|
#18+
questionerПытаться понять почему get() может уйти в бесконечный цикл считаете нецелесообразным? Вы снова интерпретируете мои слова каким-то странным образом. Нецелесообразно спрашивать на интервью и нецелесообразно разбираться для самообучения - разные вещи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2017, 11:47 |
|
||
|
Что будет если использовать HashMap в многопоточной среде?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczquestionerПытаться понять почему get() может уйти в бесконечный цикл считаете нецелесообразным? Вы снова интерпретируете мои слова каким-то странным образом. Нецелесообразно спрашивать на интервью и нецелесообразно разбираться для самообучения - разные вещи. Да, я не пытался интрепретировать. Просто отдельный вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2017, 11:49 |
|
||
|
Что будет если использовать HashMap в многопоточной среде?
|
|||
|---|---|---|---|
|
#18+
questionerДа, я не пытался интрепретировать. Просто отдельный вопрос. А давайте посмотрим на Java 8? Там может оказаться что никакого бесконечного цикла в HashMap уже и нет, например. Именно по этой причине правильный ответ на такой вопрос "недетерменированное поведение". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2017, 11:52 |
|
||
|
Что будет если использовать HashMap в многопоточной среде?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczquestionerДа, я не пытался интрепретировать. Просто отдельный вопрос. А давайте посмотрим на Java 8? Там может оказаться что никакого бесконечного цикла в HashMap уже и нет, например. Именно по этой причине правильный ответ на такой вопрос "недетерменированное поведение". Чтобы понять может или не может, на мой взгляд, надо понять по какой причине это случается в java 6 (ну или для какой это пример). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2017, 11:56 |
|
||
|
Что будет если использовать HashMap в многопоточной среде?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, или это в доке где-то написано? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2017, 11:56 |
|
||
|
Что будет если использовать HashMap в многопоточной среде?
|
|||
|---|---|---|---|
|
#18+
Alexey Tomin"Непредсказуемое поведение" это очень даже конкретика. )))) +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2017, 11:56 |
|
||
|
Что будет если использовать HashMap в многопоточной среде?
|
|||
|---|---|---|---|
|
#18+
questionerPetro123questioner, поиск делали? http://begoml.by/hashmap-and-multithreading/ Код: java 1. 2. 3. 4. 5. 6. 7. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Не понял как параллельное исполнение этих участков кода приведет к циклической ссылке Кажется тут объяснение http://mailinator.blogspot.ru/2009/06/beautiful-race-condition.html попробую понять ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2017, 12:04 |
|
||
|
Что будет если использовать HashMap в многопоточной среде?
|
|||
|---|---|---|---|
|
#18+
questioner, Вот ключевое в статье авторThis is not a bug. HashMap is built specifically for its purpose and this implementation is not intended as threadsafe. There's a gaggle of ways to make it threadsafe, but in plain, vanilla, (and very fast) form - its not. And needless to say, you shouldn't be using it that way. Если бы вам предоставили код и спросили - какие тут могут возникнуть ошибки при многопоточном использовании - это нормальный вопрос. А если вас спросили авторМеня тут спросили, а что будет если использовать обычную хеш мапу? То единственный правильный ответ - недетерменированное поведение, потому что мапа не предназначена для этого. Хотя зная как вы умеете переиначить вопрос, я не уверен что это собеседующие не правы:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2017, 12:54 |
|
||
|
Что будет если использовать HashMap в многопоточной среде?
|
|||
|---|---|---|---|
|
#18+
забыл никquestioner, Вот ключевое в статье авторThis is not a bug. Который таки исправили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2017, 12:57 |
|
||
|
Что будет если использовать HashMap в многопоточной среде?
|
|||
|---|---|---|---|
|
#18+
забыл никquestioner, Вот ключевое в статье авторThis is not a bug. HashMap is built specifically for its purpose and this implementation is not intended as threadsafe. There's a gaggle of ways to make it threadsafe, but in plain, vanilla, (and very fast) form - its not. And needless to say, you shouldn't be using it that way. Если бы вам предоставили код и спросили - какие тут могут возникнуть ошибки при многопоточном использовании - это нормальный вопрос. А если вас спросили авторМеня тут спросили, а что будет если использовать обычную хеш мапу? То единственный правильный ответ - недетерменированное поведение, потому что мапа не предназначена для этого. Хотя зная как вы умеете переиначить вопрос, я не уверен что это собеседующие не правы:) я не ищу поддержки и понимаю, что человек, который это спрашивал явно больше меня знает и имеет больше опыта. Я всего лишь хочу докапаться до истины. авторкакие тут могут возникнуть ошибки да, был код. одного потока и что вам конкретный код одного потока даст? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2017, 13:20 |
|
||
|
Что будет если использовать HashMap в многопоточной среде?
|
|||
|---|---|---|---|
|
#18+
questionerЯ всего лишь хочу докапаться до истины. Первым делом вам надо научиться правильно формулировать вопрос\проблему. Потому что мусор на входе - мусор на выходе. Ваше стремление совершенствоваться похвально, но если искать в неправильном месте - то это Сизифов труд questionerда, был код. одного потока и что вам конкретный код одного потока даст? Вот опять, код не бывает "одного потока", код это просто код. Который можно запустить в многопоточной среде и эмулировать у себя в голове) Вас интересует тема data race? Отлично, есть много примеров в сети, даже приведенный вами - изучайте, прокачивайтесь, если что непонятно - спрашивайте, но слушайте собеседников и не выдавайте свои додумывания за истину. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2017, 13:40 |
|
||
|
Что будет если использовать HashMap в многопоточной среде?
|
|||
|---|---|---|---|
|
#18+
вот смотрите. когда thread 2 закончился мы видим вот такую картинку: thread1 начнёт исполняться со строки десять. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Дальше я что-то теряю нить рассуждений. что за итерации он показывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2017, 15:29 |
|
||
|
Что будет если использовать HashMap в многопоточной среде?
|
|||
|---|---|---|---|
|
#18+
тут детали, если кто упустил http://mailinator.blogspot.ru/2009/06/beautiful-race-condition.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2017, 15:34 |
|
||
|
Что будет если использовать HashMap в многопоточной среде?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2017, 16:02 |
|
||
|
Что будет если использовать HashMap в многопоточной среде?
|
|||
|---|---|---|---|
|
#18+
questionerВсе знают, что в многопоточной среде нужно использовать синхронизованные коллекции. Меня тут спросили, а что будет если использовать обычную хеш мапу? ConcurrentModificationException ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2017, 17:40 |
|
||
|
Что будет если использовать HashMap в многопоточной среде?
|
|||
|---|---|---|---|
|
#18+
questionerвот что за первая итерация у них нарисована? и чем thread1 buckets отличается от thread2 buckets? Тут и тут примерно все разобрано. Пока идет чтение переменных по reference или вызов функций возвращаюших значение в одном потоке, другой поток может изменить значения по reference внутри массива или на сам массив (добавить элемент в массив или скопировать массив), в результате у каждого потока может указатель на различные массивы или переменные в массиве (один поток добавил ключ а другой этот элемент не увидел и продублировал операцию либо увеличил массив при переполнении длины) - учтите такой фактор как синхронизация и видимость данных между потоками - когда HashMap не volatile, возникают дополнительные комбинации для race condition так как сложно сказать когда изменения сделанные в одном потоке будет видны в другом. Даже при работе в многопоточном режиме только на чтение из hashmap желательно учитывать когда создаются потоки и когда заканчивает заполняеться hashmap. The answer is yes, there are potential race conditions: when resizing an HashMap by two threads at the same time when collisions happens. Collision can happen when two elements map to the same cell even if they have a different hashcode. During the conflict resolution, there can be a race condition and one added key/value pair could be overwritten by another pair inserted by another thread. To explain better what I mean on the second point, I was looking at the source code of HashMap in OpenJdk 7 Код: java 1. 2. First it calculates an Hash of your key (combining two hash functions), then it maps to a cell with indexFor, then it checks if that cell contains the same key or is already occupied by another one. If it's the same key, it just overwrite the value and there is no problem here. If it's occupied it looks at the next cell and then the next until it finds an empty position and call addEntry(), which could even decide to resize the array if the array is more loaded than a certain loadFactor. Our table containing the entries is just a vector of Entry which holds key and value. Код: java 1. 2. 3. 4. In a concurrent environment, all sort of evil things can happen, for instance one thread gets a collision for cell number 5 and looks for the next cell (6) and finds it empty. Meanwhile another thread gets an index of 6 as a result of indexFor and both decide to use that cell at the same time, one of the two overwriting the other. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2017, 23:33 |
|
||
|
Что будет если использовать HashMap в многопоточной среде?
|
|||
|---|---|---|---|
|
#18+
UsmanquestionerВсе знают, что в многопоточной среде нужно использовать синхронизованные коллекции. Меня тут спросили, а что будет если использовать обычную хеш мапу? ConcurrentModificationException Один из возможных вариантов, но только при итерации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2017, 00:17 |
|
||
|
|

start [/forum/moderation_log.php?user_name=%D0%B0%D1%83%D0%B2%D0%B2%D0%B2]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
67ms |
get tp. blocked users: |
2ms |
| others: | 449ms |
| total: | 632ms |

| 0 / 0 |
