2016-04-17 3 views
0

Допустимо ли начать Thread изнутри его конструктора после того, как мы инициализировали поля, и является ли вообще плохой практикой начать Thread изнутри его конструктора? Например:Начальная тема изнутри его конструктора

class A extends Thread{ 
     private String s; 
     private int x 
     public A(String str,int xx){ 
     s = str; 
     x = xx; 
     start(); 
     } 
     public void run() { System.out.println(s + " " + x);} 

    } 
+3

Прежде всего, это плохая практика распространения Thread. Так что это не проблема. Но даже если это не так, то да, то, что вы опубликовали, не является хорошей идеей - критически использовать объект до того, как он завершил строительство, никогда не бывает хорошим. –

+0

Не могли бы вы объяснить, почему расширение потока - это плохая практика? Я могу видеть ограничение (не будучи в состоянии продлить), но кроме этого, это в значительной степени вопрос выбора. –

ответ

0

Как отмечалось в моем комментарии, плохая практика продлить тему, и поэтому вопрос не является проблемой. Но опять ваш предложенный код намного больше, чем «плохая практика» - это опасно. Вы выполняете критические действия над объектом до его полной сборки, и это может привести к непредвиденным и трудным для отладки ошибок и побочных эффектов. Также это значительно ограничивает гибкость вашего кода, так как теперь вы вынуждены использовать поток одним и только одним способом.

Что касается отдельной проблемы внедрения Runnable или продолжения Thread, это было хорошо обсуждено на этом сайте в нескольких потоках, включая this one, и я приглашаю вас взглянуть.

0

В целом это хорошая практика, чтобы контролировать объект только снаружи, следовательно, методы получения и установки etc..the же применяется здесь, начиная нить как это просто плохо пахнет, не сделай это.

+0

Мои мысли точно. Я видел это в некоторых примерах для параллелизма Java и хотел знать, является ли это обычной реализацией –

Смежные вопросы