可以在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() {
...
}
};
你可以在这里看到原件。