|
|
|
Запуск нового потока в конструкторе?
|
|||
|---|---|---|---|
|
#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?fid=59&tid=2130598]: |
0ms |
get settings: |
15ms |
get forum list: |
26ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
52ms |
get topic data: |
19ms |
get forum data: |
4ms |
get page messages: |
71ms |
get tp. blocked users: |
3ms |
| others: | 288ms |
| total: | 490ms |

| 0 / 0 |
