我了解,出于线程安全的考虑,不应在构造函数中转义“此”引用,因为该对象尚未完全构造,而是“泄漏”给其他对象。例如

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


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

public class TestClass{
       public TestClass(){

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

最佳答案

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

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


要么

StaticClass.addListener(new TestClass());

关于java - 在这种情况下,“this”引用是否会从Constructor逃脱?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4020588/

10-12 20:54