0

有可能在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
}
4

3 回答 3

2

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

于 2013-01-30T21:58:52.373 回答
1

不。

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

即使你有它,做类似的事情

 public Person() {
   Thread a = new MyThread(this);
 }

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

于 2013-01-30T22:00:09.097 回答
0

这是你想要的?请注意使用{start()}which 避免了start在构造函数中调用的所有问题。

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

你可以在这里看到原文。

于 2013-01-30T22:11:10.410 回答