|
|
|
synchronizedMap.безопасно ли сначала взять итератор в несинхронизованном, а читать в синхр
|
|||
|---|---|---|---|
|
#18+
Заинтересовался sync коллекциями. прочитал статью: http://dev-things.blogspot.ru/2011/03/synchronizedmap-and-concurrenthashmap.html?showComment=1401108193889#c3972341173079778332 Не уловил почему " Needn't be in synchronized block" Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. Поясните пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 17:07 |
|
||
|
synchronizedMap.безопасно ли сначала взять итератор в несинхронизованном, а читать в синхр
|
|||
|---|---|---|---|
|
#18+
redwhite90 , Откройте класс Collections , и посмотрите на реализацию этого метода. Если вы понимаете, как работает synchronized, вопрос должен отпасть сам собой. Если не понимаете - сначала ознакомьтесь с synchronized, а потом переходите к коллекциям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 19:07 |
|
||
|
synchronizedMap.безопасно ли сначала взять итератор в несинхронизованном, а читать в синхр
|
|||
|---|---|---|---|
|
#18+
DEVcoach, DEVcoachОткройте класс Collections, и посмотрите на реализацию этого метода посмотрел. Да знаю, что тупо все методы завернуты в sync секцию DEVcoachЕсли вы понимаете, как работает synchronized понимаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 19:26 |
|
||
|
synchronizedMap.безопасно ли сначала взять итератор в несинхронизованном, а читать в синхр
|
|||
|---|---|---|---|
|
#18+
redwhite90 , А итератор завернут? :-) Ведь для работы с ним надо постоянно вызывать разные его методы - hasNext(), next(), и т.д.. По отдельности они синхронизированы, а в компексе - нет. Поэтому вы легко можете словить тот же ConcurrentModificationException, если не будете итерироваться внутри synchronized-блока. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 19:52 |
|
||
|
synchronizedMap.безопасно ли сначала взять итератор в несинхронизованном, а читать в синхр
|
|||
|---|---|---|---|
|
#18+
DEVcoach, Если я правильно понял, то вызывается именно этот метод: Код: java 1. 2. 3. а вот места где методы итератора хотя бы по одному синхронизованы в упор не вижу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 21:30 |
|
||
|
synchronizedMap.безопасно ли сначала взять итератор в несинхронизованном, а читать в синхр
|
|||
|---|---|---|---|
|
#18+
redwhite90 , Ну тем более :-) Еще раз, главная идея здесь в том, что работа с итератором строится через последовательные вызовы его методов. Как минимум hasNext() и next(). Если вы все эти вызовы не обернете в единую критическую секцию, то другой поток между, например, двумя последовательными вызовами next() из вашего потока, может вставить в коллекцию новое значение. И вы словите ConcurrentModificationException. Это в лучшем случае. А в худшем - ваш итератор может проскочить какие-то элементы. Может напороться на неверный индекс массива, бросив ArrayIndexOutOfBoundsException, и т.д. Вам оно надо? Думаю, нет :-) Потому и надо оборачивать работу с итератором в synchronized. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 21:38 |
|
||
|
synchronizedMap.безопасно ли сначала взять итератор в несинхронизованном, а читать в синхр
|
|||
|---|---|---|---|
|
#18+
cdtyjv, Код: java 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 21:55 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38652561&tid=2127130]: |
0ms |
get settings: |
8ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
173ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
| others: | 212ms |
| total: | 501ms |

| 0 / 0 |
