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

java multithreading

6716 просмотра

3 ответа

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

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

Автор: Richard Stokes Источник Размещён: 13.11.2019 11:41

Ответы (3)


25 плюса

Решение

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

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

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

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

1 плюс

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

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

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

0 плюса

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

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