Java: запуск нового потока в конструкторе
Почему запускается новый поток в конструкторе, нахмуренном в Java (или где угодно, если на то пошло). Я получаю предупреждения от Netbeans за это, но это не дает мне никаких предложений по рефакторингу. Я пишу приложение Swing для клиента/сервера, и поток, который я запускаю, находится в конструкторе JFrame сервера, чтобы постоянно слушать клиентские датаграммы.
Почему эта хорошая практика и как ее избежать?
Ответы
Ответ 1
Запуск потока из конструктора позволяет начальному потоку обращаться к объекту, который был сконструирован до его правильной сборки, и, таким образом, делает не полностью сконструированный объект доступным для нового потока.
Вы можете создать поток в конструкторе и предоставить метод "запуска" для запуска потока извне.
Или вы могли бы сделать конструктор и методы запуска приватными и предоставить статический метод factory, который создаст объект, запустит поток и вернет созданный объект.
Ответ 2
Посмотрите на эту ссылку http://www.ibm.com/developerworks/java/library/j-jtp0618/index.html#code4
Это делается с неявными ссылками на this
и subclassing
.
Ответ 3
Создание класса final также может быть решением, потому что не будет подклассов.