我理解,由于线程安全问题,不应在构造函数中转义'this'引用,其中对象尚未完全构造,但“泄露”到其他对象。例如
public class TestClass{
public TestClass(){
StaticClass.addListener(this);
}
}
如果我在另一个构造函数中调用默认构造函数,那是否可以保证构造对象的完整性并避免任何“this”引用转义问题?
public class TestClass{
public TestClass(){
}
public TestClass(String str){
this();
StaticClass.addListener(this);
}
}
答案 0 :(得分:7)
简而言之,是的,您的this
引用在构造完成之前仍然泄漏,因此在达到新的Java 5内存模型的构造内存边界之前。您需要在新语句之后添加侦听器,而不是在构造序列中的任何位置添加:
TestClass obj=new TestClass();
StaticClass.addListener(obj);
或
StaticClass.addListener(new TestClass());