是否可以从其参数中的对象启动Java中的线程?

时间:2013-01-30 21:55:47

标签: java multithreading

是否可以在Java中执行此类操作?我只是想知道。

首先,我只是创建一个有一个参数的新线程。

Thread thread = new Thread(new Person());

然后,在Person()的构造函数中,我想启动该线程。 这样的事情可能吗?

public Person() {
    // Here belongs some code for the constructor and then
    // I would like to start the thread
}

3 个答案:

答案 0 :(得分:3)

不,你不能。在Java可以调用Thread()构造函数之前,它首先必须急切地评估所有参数,包括调用Person()构造函数。这意味着,在调用Person构造函数时,外部Thread对象甚至不存在或尚未初始化,因此您无法真正使用它。

答案 1 :(得分:1)

没有

您没有对Person构造函数中的线程的引用。所以,线程仍然不存在。

即使你拥有它,也可以做像

这样的事情
 public Person() {
   Thread a = new MyThread(this);
 }

是不好的做法,因为您传递的实例(this)可能尚未完全初始化。

答案 2 :(得分:0)

这是你在找什么?请注意{start()}的使用,它避免了在构造函数中调用start的所有问题。

  new Thread() {
    { start(); }
    public void run() {
     ...
    }
  };

您可以看到原始的here