从内部启动线程的构造函数

时间:2016-04-17 00:01:31

标签: java multithreading concurrency

在我们初始化字段之后从它的构造函数内部启动一个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);}

    }

2 个答案:

答案 0 :(得分:0)

一般来说,从外面控制一个物体是一种很好的做法,因此有吸气剂和固定剂等方法......这同样适用于此,开始一个只是闻起来不好的线程,不要这样做

答案 1 :(得分:0)

正如我的评论中所述,扩展Thread是一种不好的做法,所以这个问题不是问题。但是你建议的代码再次超过"糟糕的做法" - 这很危险。您在对象完全构建之前对其执行关键操作,这可能导致无法预料且难以调试的错误和副作用。这也极大地限制了代码的灵活性,因为现在你不得不以一种方式使用线程。

关于实现Runnable或扩展Thread的单独问题,本网站已经在包括this one在内的多个主题中对此进行了详细讨论,我邀请您一起来看看。