我理解,由于线程安全问题,不应在构造函数中转义'this'引用,其中对象尚未完全构造,但"泄露"到其他对象.例如
public class TestClass{
public TestClass(){
StaticClass.addListener(this);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我在另一个构造函数中调用默认构造函数,这是否保证构造对象的完整性并避免任何"this"引用转义问题?
public class TestClass{
public TestClass(){
}
public TestClass(String str){
this();
StaticClass.addListener(this);
}
}
Run Code Online (Sandbox Code Playgroud)
简而言之,是的,this在构造完成之前,您的引用仍然泄漏,因此在达到新的Java 5内存模型的构造内存边界之前.您需要在新语句之后添加侦听器,而不是在构造序列中的任何位置添加:
TestClass obj=new TestClass();
StaticClass.addListener(obj);
Run Code Online (Sandbox Code Playgroud)
要么
StaticClass.addListener(new TestClass());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
402 次 |
| 最近记录: |