在自己的构造函数中调用thread.start()

10 java multithreading

一个线程在它自己的构造函数中调用this.start()是否合法?如果是这样,这会导致什么样的潜在问题?我知道对象不会完全初始化,直到构造函数运行完成,但除此之外还有其他问题吗?

Hea*_*ers 13

出于内存安全原因,您不应将对象或该对象的字段的引用从其构造函数中公开给另一个线程.假设您的自定义线程具有实例变量,通过从构造函数中启动它,您可以保证违反Java内存模型准则.有关详细信息,请参阅Brian Goetz的安全施工技术.


Tom*_*ine 1

这是合法的,但并不明智。实例的线程部分将被完全初始化,但您的构造函数可能不会。几乎没有理由扩展 Thread,并且像这样的技巧不会对您的代码有帮助。