Java: запуск нового потока в конструкторе
6716 просмотра
3 ответа
Почему запуск нового потока в конструкторе не одобряется в Java (или где угодно, если на то пошло). Я получаю предупреждения от Netbeans за это, но это не дает мне никаких рекомендаций по рефакторингу. Я пишу клиент-серверное приложение Swing, и поток, который я запускаю, находится в конструкторе JFrame сервера, чтобы непрерывно прослушивать клиентские дейтаграммы.
Почему это не очень хорошая практика и как мне этого избежать?
Автор: Richard Stokes Источник Размещён: 13.11.2019 11:41Ответы (3)
25 плюса
Запуск потока из конструктора позволяет запущенному потоку получить доступ к создаваемому объекту до его правильного построения и, таким образом, сделать не полностью созданный объект доступным для нового потока.
Вы можете создать поток в конструкторе и предоставить метод запуска для запуска потока извне.
Или вы можете сделать конструктор и методы запуска приватными и предоставить статический метод фабрики, который будет создавать объект, запускать поток и возвращать созданный объект.
Автор: JB Nizet Размещён: 08.11.2011 09:591 плюс
Посмотрите по этой ссылке http://www.ibm.com/developerworks/java/library/j-jtp0618/index.html#code4
Это сделано с неявными ссылками на this
и subclassing
.
0 плюса
Создание класса final также может быть решением, потому что не будет подклассов.
Автор: omilus Размещён: 04.09.2019 11:40Вопросы из категории :
- java В чем разница между int и Integer в Java и C #?
- java Как я могу определить IP моего маршрутизатора / шлюза в Java?
- java Каков наилучший способ проверки XML-файла по сравнению с XSD-файлом?
- java Как округлить результат целочисленного деления?
- java Преобразование списка <Integer> в список <String>
- java Почему я не могу объявить статические методы в интерфейсе?
- java Библиотека Java SWIFT
- java Выключение компьютера
- java Как я могу воспроизвести звук на Java?
- java Когда выбирать отмеченные и непроверенные исключения
- multithreading Что такое состояние гонки?
- multithreading Что такое тупик?
- multithreading Что такое мьютекс?
- multithreading Как начать потоки в plain C?
- multithreading Потокобезопасный foreach перечисление списков
- multithreading Когда ключевое слово volatile должно использоваться в C #?
- multithreading Безопасно ли получать значения из java.util.HashMap из нескольких потоков (без изменений)?
- multithreading Что такое «потоковое локальное хранилище» в Python и зачем оно мне нужно?
- multithreading Вы когда-нибудь использовали ключевое слово volatile в Java?
- multithreading Как ждать отмены BackgroundWorker?