Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 3

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