|
|
|
Объясните пример их книги Concurency in practice
|
|||
|---|---|---|---|
|
#18+
Разбираю пример из книги Concurency in practice: программа диспетчер транспортных средств. Т/с характеризуется идентификатором и координатами взятого с GPS. Один поток показывает как-то информацию, другой ее обновляет.Код ниже, взят из книги Код: plaintext 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. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. Я не могу понять зачем нужен этот метод deepCopy? Ведь все действия с location находятся в блоках synchronized. На кой нужен этот метод? Почему нельзя сделать так как ниже Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2011, 11:00 |
|
||
|
Объясните пример их книги Concurency in practice
|
|||
|---|---|---|---|
|
#18+
Usik, Ну дык может потому что у клиента, который создает новый экземпляр MonitorVehicleTracker остается ссылка на коллекцию locations? И он с этой коллекцией может играться как хочет в любое время после того как объект MonitorVehicleTracker был создан? Вмешиваясь этим самым в состояние объекта MonitorVehicleTracker, что может привести MonitorVehicleTracker в inconsistent состояние. А если мы при создании MonitorVehicleTracker создадим копию locations, то уже никак не будем зависеть от исходной коллекции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2011, 11:07 |
|
||
|
Объясните пример их книги Concurency in practice
|
|||
|---|---|---|---|
|
#18+
Причем коллекция состоит из String и из MutablePoint, т.е. при копировании коллекции, String можно копировать по ссылке (ибо String immutable - его никто не сможет поменять), а MutablePoint - надо тоже делать deep copy: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2011, 11:14 |
|
||
|
Объясните пример их книги Concurency in practice
|
|||
|---|---|---|---|
|
#18+
Ок, а зачем в этом методе вызывать Collections.unmodifiableMap(result), мы же ведь скопировали коллекцию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2011, 12:00 |
|
||
|
Объясните пример их книги Concurency in practice
|
|||
|---|---|---|---|
|
#18+
UsikОк, а зачем в этом методе вызывать Collections.unmodifiableMap(result), мы же ведь скопировали коллекцию? Ну да, я с первого раза тоже не могу понять для чего это могло бы быть нужно... По-моему можно было бы и не делать unmodifiableMap. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2011, 12:11 |
|
||
|
Объясните пример их книги Concurency in practice
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. Обратите внимание на этот метод, deepCopy используется не только для того, чтобы отдать копию локейшенов клиенту но и в конструкторе. Поэтому и возвращается unmodifyableMap, по-большому счету чтобы уберечь самого себя от модификации коллекции внутри методов VehicleTracker, ну и немного паранойи:) Это хорошая практика. В случае если бы deepCopy отдавался только наружу - то вполне можно было обойтись без оборочавания в немодифайебл мап ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2011, 15:36 |
|
||
|
Объясните пример их книги Concurency in practice
|
|||
|---|---|---|---|
|
#18+
забыл ник Код: plaintext 1. 2. 3. 4. Обратите внимание на этот метод, deepCopy используется не только для того, чтобы отдать копию локейшенов клиенту но и в конструкторе. Поэтому и возвращается unmodifyableMap, по-большому счету чтобы уберечь самого себя от модификации коллекции внутри методов VehicleTracker, ну и немного паранойи:) Это хорошая практика. В случае если бы deepCopy отдавался только наружу - то вполне можно было обойтись без оборочавания в немодифайебл мап Да, присоединяюсь. На мой взгляд в данном случае это просто хорошая практика и не более. Но я бы вынес создание unmodifyableMap из метода deepCopy, ибо название метода как бы не подразумевает :-) Но это уже придирки. А книжка очень хорошая (я про Java Concurrency in Practice) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2011, 16:27 |
|
||
|
Объясните пример их книги Concurency in practice
|
|||
|---|---|---|---|
|
#18+
Как-то в этом примере мапа скопирована супер странно. почему бы просто в коструктор было не передать locations ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2017, 20:22 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37541923&tid=2123161]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
63ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 394ms |

| 0 / 0 |
