Вопрос:

Java: запуск нового потока в конструкторе

java multithreading

6716 просмотра

3 ответа

1592 Репутация автора

Почему запуск нового потока в конструкторе не одобряется в Java (или где угодно, если на то пошло). Я получаю предупреждения от Netbeans за это, но это не дает мне никаких рекомендаций по рефакторингу. Я пишу клиент-серверное приложение Swing, и поток, который я запускаю, находится в конструкторе JFrame сервера, чтобы непрерывно прослушивать клиентские дейтаграммы.

Почему это не очень хорошая практика и как мне этого избежать?

Автор: Richard Stokes Источник Размещён: 08.11.2011 09:49

Ответы (3)


1 плюс

2879 Репутация автора

Посмотрите по этой ссылке http://www.ibm.com/developerworks/java/library/j-jtp0618/index.html#code4

Это сделано с неявными ссылками на thisи subclassing.

Автор: Ravi Bhatt Размещён: 08.11.2011 09:55

25 плюса

576323 Репутация автора

Решение

Запуск потока из конструктора позволяет запущенному потоку получить доступ к создаваемому объекту до его правильного построения и, таким образом, сделать не полностью созданный объект доступным для нового потока.

Вы можете создать поток в конструкторе и предоставить метод запуска для запуска потока извне.

Или вы можете сделать конструктор и методы запуска приватными и предоставить статический метод фабрики, который будет создавать объект, запускать поток и возвращать созданный объект.

Автор: JB Nizet Размещён: 08.11.2011 09:59

0 плюса

468 Репутация автора

Создание класса final также может быть решением, потому что не будет подклассов.

Автор: omilus Размещён: 04.09.2019 11:40
Вопросы из категории :
32x32