|
|
|
Вопрос на понимание синхронизации
|
|||
|---|---|---|---|
|
#18+
У меня есть синхронизация некого числа (long). Детали использования и область применения не важны. Число надо увечивать и уменьшать на некие задаваемые значения и в случае креша сбрасывать в ноль. Число должно быть синхронизировано. Уменьшение/увеличение числа достигается через знак (пложителное/отрицаельное). Плюс, есть константа ограничитель - при привышении кидаю эксепшен. Понимаю, что кода под синхронайзд секцией должно быть меньше, но пока так. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Вопросы: 1. Будет ли работать синхронизаци для вторго блока (я думаю нет, но хочу понять почему)? 2. Может в этом случае использовать synchronized переменную? 3. Может надо применить другое решение? Плиз, пните мне в нужном направлении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2012, 18:10:38 |
|
||
|
Вопрос на понимание синхронизации
|
|||
|---|---|---|---|
|
#18+
swerg1. Будет ли работать синхронизаци для вторго блока (я думаю нет, но хочу понять почему)? Будет, только надо lockMonitor сделать final, чтобы никто другой монитор туда не записал. swerg2. Может в этом случае использовать synchronized переменную? Таких не бывает. swerg3. Может надо применить другое решение? Плиз, пните мне в нужном направлении. С точки зрения synchronized норм. Если в логику не вникать. А вообще, то есть AtomicLong и Lock. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2012, 18:23:55 |
|
||
|
Вопрос на понимание синхронизации
|
|||
|---|---|---|---|
|
#18+
Ещё стоит добавить volatile и синхронизировать чтение переменной. Тут бы ReadWriteLog и пригодился. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2012, 18:33:15 |
|
||
|
Вопрос на понимание синхронизации
|
|||
|---|---|---|---|
|
#18+
ReadWriteLock ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2012, 18:33:29 |
|
||
|
Вопрос на понимание синхронизации
|
|||
|---|---|---|---|
|
#18+
Спасибо. Ее походу читать вообще не надою Нужно лишь чекать превышение и тогда включать полную очистку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2012, 18:44:16 |
|
||
|
Вопрос на понимание синхронизации
|
|||
|---|---|---|---|
|
#18+
Самый идеальный вариант - унаследоваться от AbstractQueuedSynchronizer и переопределить tryAcquireShared(), но это advanced use-case. Можно посмотреть в стандартной библиотеке - например Semaphore, CountdownLatch реализованы по похожей схеме. А так да - Lock и AtomicLong попроще будут, единственно надо будет дописать логику по очистке при переполнении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2012, 18:52:12 |
|
||
|
Вопрос на понимание синхронизации
|
|||
|---|---|---|---|
|
#18+
Стоит ли еще туда же запихать ConcurrentHashMap (нуно для скорости - не надо обходить граф при удалении вершин, кроче детали). Или нуно искать другой подход. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2012, 18:54:50 |
|
||
|
Вопрос на понимание синхронизации
|
|||
|---|---|---|---|
|
#18+
swergСтоит ли еще туда же запихать ConcurrentHashMap (нуно для скорости - не надо обходить граф при удалении вершин, кроче детали). Или нуно искать другой подход. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. Тут не имеет особого смысла использовать ConcurrentMap для скорости - ибо боттлнек у вас в любом случае - это монитор. Тут хоть какая мапа - по барабану. Ну и оффтоп - если уж используете ConcurrentMap, то у него есть метод putIfAbsent вместо exists() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2012, 18:59:26 |
|
||
|
Вопрос на понимание синхронизации
|
|||
|---|---|---|---|
|
#18+
Да и смысла в первом if я вообще не вижу, вы экономите на спичках, предполагаю что значение у вас будут чаще положительные чем ортицательные, да и якобы экономию на проверке mynumber + value< MAX_NUMBER - вы просто напросто теряете такой же проверкой вначале - if (value < 0), так что смысла в if вообще нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2012, 19:03:10 |
|
||
|
Вопрос на понимание синхронизации
|
|||
|---|---|---|---|
|
#18+
ну и напоследок, я как параноик сделал бы или весь класс final или метод change ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2012, 19:08:00 |
|
||
|
Вопрос на понимание синхронизации
|
|||
|---|---|---|---|
|
#18+
забыл ник, вы правы накапливание будет только положительных значений. Как только вершина графа будет удаляться, я буду получать из мапа размер всех чайлдов (и буду вычитать из mynumber). Мне не надо будет их обходить; взять размер чайлда очень дрогостоящая операция. Типа что-то такого: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2012, 19:24:31 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=254&tid=2130344]: |
0ms |
get settings: |
22ms |
get forum list: |
25ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
40ms |
get topic data: |
17ms |
get forum data: |
4ms |
get page messages: |
73ms |
get tp. blocked users: |
2ms |
| others: | 316ms |
| total: | 509ms |

| 0 / 0 |
