在这种情况下,'this'引用是否会从Constructor中逃脱?

时间:2010-10-26 03:55:36

标签: java

我理解,由于线程安全问题,不应在构造函数中转义'this'引用,其中对象尚未完全构造,但“泄露”到其他对象。例如

public class TestClass{
       public TestClass(){
            StaticClass.addListener(this);
       }
}

如果我在另一个构造函数中调用默认构造函数,那是否可以保证构造对象的完整性并避免任何“this”引用转义问题?

public class TestClass{
       public TestClass(){

       }
       public TestClass(String str){
            this();
            StaticClass.addListener(this);
       }
}

1 个答案:

答案 0 :(得分:7)

简而言之,是的,您的this引用在构造完成之前仍然泄漏,因此在达到新的Java 5内存模型的构造内存边界之前。您需要在新语句之后添加侦听器,而不是在构造序列中的任何位置添加:

TestClass obj=new TestClass();
StaticClass.addListener(obj);

StaticClass.addListener(new TestClass());