powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Запуск нового потока в конструкторе?
2 сообщений из 2, страница 1 из 1
Запуск нового потока в конструкторе?
    #38033333
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
просматривал чужой код в Netbeans и в одном месте
он выдал такое предупреждение

Запуск нового потока в конструкторе может привести к непредвиденным результатам, его следует избегать

кто-нибудь может объяснить более популярно, что может скрываться под этим предупреждениям и к камим результатам может привести?
...
Рейтинг: 0 / 0
Запуск нового потока в конструкторе?
    #38033348
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Курить Java concurrency in practice до просветления:)

Ну на пальцах долго обьяснять, есть такое понятие как safe publicaton - это когда ссылка на объект становится видимой для других потоков, когда она содержит заведомо инициализированный объект. Смотрите, вы в конструкторе запускаете поток, он может начать выполняться до того, как закончит выполнение код вашего конструктора - в итоге вы можете отгрести кучу проблем.
Эту проблему решают таким образом - делают метод init(), в коде которого запускают новый поток, так как метод init выполняется на какой-то ссылке - то ее конструктор гарантированно успел отработать. в общем идиома такая

Код: java
1.
2.
SomeObject s = new SomeObject();
s.init();


Конечно это добавляет геморроя для клиентов класса(надо незабыть его вызвать, но в многопоточных приложениях это меньшее зло)

Мое обьяснение не совсем корректное, об этой теме можно говорить и говорить - а лучше читать) Я вам так - на пальцах пытался обьяснить..
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Запуск нового потока в конструкторе?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]