|
|
|
как синхронизировать смерть объектов
|
|||
|---|---|---|---|
|
#18+
имеется примерно следующая схема: Код: 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. собственно вопрос: почему за объектом класса А не приходит GC когда он свое отработал и я даже вручную единственной ссылке на этот объект присваиваю null? тоесть получается после того как объект класса А свою работу сделал и стал не нужен, поток B продолжает крутится в цикле. или подскажите как можно по другому сделать чтобы когда объект класса A отработал свое и стал не нужен, он убивался одновременно с потоком B ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 03:13 |
|
||
|
как синхронизировать смерть объектов
|
|||
|---|---|---|---|
|
#18+
Зачем? Сборщик уберет когда это будет нужно и вообще finalize - зло, которое стоит использовать в ИСКЛЮЧИТЕЛЬНЫХ случаях ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 03:33 |
|
||
|
как синхронизировать смерть объектов
|
|||
|---|---|---|---|
|
#18+
забыл ник, тоесть без финалайза поток тоже убъется когда GC прийдет за объектом который его запустил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 03:43 |
|
||
|
как синхронизировать смерть объектов
|
|||
|---|---|---|---|
|
#18+
tramadol, Код: 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. 33. 34. 35. 36. 37. 38. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 04:36 |
|
||
|
как синхронизировать смерть объектов
|
|||
|---|---|---|---|
|
#18+
Usman, спасибо за идею, но мне нужно чтобы это все убивалось без использования try with resources ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 05:32 |
|
||
|
как синхронизировать смерть объектов
|
|||
|---|---|---|---|
|
#18+
tramadolUsman, спасибо за идею, но мне нужно чтобы это все убивалось без использования try with resources какие-то религиозные убеждения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 08:43 |
|
||
|
как синхронизировать смерть объектов
|
|||
|---|---|---|---|
|
#18+
tramadolтоесть без финалайза поток тоже убъется когда GC прийдет за объектом который его запустил? Вас обременяют знания из другой технологии, и вы зачем-то проецируете их на Java. finalize() нельзя использовать. Вообще. Для чистки ресурсов по сборке мусора используется PhantomReference - но это отдельная тема и она тоже не везде применима. Если у вас поток каким-то образом ссылается на объект А, то GC никогда его не соберет, пока поток жив. Вы всегда можете воспользоваться профайлером (например JDK/bin/jvisualvm.exe) чтобы узнать что именно держит ссылку на ваш объект. Ваш подход уже вскрыл свои критические недостатки, но вы отказываетесь их замечать. Нельзя привязывать ресурсы к времени жизни объекта в Java, не имея на то веских причин. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 09:01 |
|
||
|
как синхронизировать смерть объектов
|
|||
|---|---|---|---|
|
#18+
tramadol, Код: java 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 09:02 |
|
||
|
как синхронизировать смерть объектов
|
|||
|---|---|---|---|
|
#18+
DDiver, мне кажется неудобно будет использовать библиотеку только с try-with-resources ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 14:31 |
|
||
|
как синхронизировать смерть объектов
|
|||
|---|---|---|---|
|
#18+
tramadolDDiver, мне кажется неудобно будет использовать библиотеку только с try-with-resources А библиотеку с недетерминированым поведением удобно использовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 14:33 |
|
||
|
как синхронизировать смерть объектов
|
|||
|---|---|---|---|
|
#18+
tramadol, Выше уже правильно заметили, что в подобных случаях нужно давать метод ручного управления ресурсами. И программисты должны его использовать. finalize можно делать только как защиту от ошибок программистов, чтобы лишние потоки не висели. При этом желательно куда-нибудь ругнуться, что ресурс не был освобожден правильно. По сути вопроса. tramadolи я даже вручную единственной ссылке на этот объект присваиваю null? Это той, которая есть внутри вашего B (inner class)? До нее вообще-то так просто не добраться, да и не нужно обычно. Или все-таки вы про какую-то другую ссылку? Ну тогда работающий поток будет держать ваш A. Отказывайтесь от inner class. А еще GC недетерминирован. И ваш объект может не собираться сборщиком мусора просто из вредности. Так что finalize для завершения потока - это именно защитная мера, чтобы _уже случившаяся_ ошибка управления ресурсами не слишком влияла на приложение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 23:05 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=59&tid=2126269]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
153ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 445ms |

| 0 / 0 |
