|
|
|
Запуск нового потока в конструкторе?
|
|||
|---|---|---|---|
|
#18+
просматривал чужой код в Netbeans и в одном месте он выдал такое предупреждение Запуск нового потока в конструкторе может привести к непредвиденным результатам, его следует избегать кто-нибудь может объяснить более популярно, что может скрываться под этим предупреждениям и к камим результатам может привести? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2012, 23:54:44 |
|
||
|
Запуск нового потока в конструкторе?
|
|||
|---|---|---|---|
|
#18+
Курить Java concurrency in practice до просветления:) Ну на пальцах долго обьяснять, есть такое понятие как safe publicaton - это когда ссылка на объект становится видимой для других потоков, когда она содержит заведомо инициализированный объект. Смотрите, вы в конструкторе запускаете поток, он может начать выполняться до того, как закончит выполнение код вашего конструктора - в итоге вы можете отгрести кучу проблем. Эту проблему решают таким образом - делают метод init(), в коде которого запускают новый поток, так как метод init выполняется на какой-то ссылке - то ее конструктор гарантированно успел отработать. в общем идиома такая Код: java 1. 2. Конечно это добавляет геморроя для клиентов класса(надо незабыть его вызвать, но в многопоточных приложениях это меньшее зло) Мое обьяснение не совсем корректное, об этой теме можно говорить и говорить - а лучше читать) Я вам так - на пальцах пытался обьяснить.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2012, 00:09:07 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=59&tid=2130598]: |
0ms |
get settings: |
14ms |
get forum list: |
27ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
54ms |
get topic data: |
19ms |
get forum data: |
5ms |
get page messages: |
72ms |
get tp. blocked users: |
2ms |
| others: | 328ms |
| total: | 535ms |

| 0 / 0 |
