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



可以在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
}

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

No.

构造函数中没有对线程Person引用。因此,线程仍然不存在。

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

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

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

这是你要找的吗?请注意使用 {start()},这样可以避免在构造函数中调用 start 的所有问题。

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

你可以在这里看到原件。

最新更新