对象的发布与逸出
“发布(Publish)“一个对象是指使对象能够在当前作用域之外的代码中使用。可以通过公有静态变量,非私有方法,构造方法内隐含引用三种方式。如果对象构造完成之前就发布该对象,就会破坏线程安全性。
当某个不应该发布的对象被发布时,这种情况就被称为逸出(Escape)
不要在构造过程中使用this引用逸出
发布对象的方式:
- 将对象的引用存储到公共静态域中。
- 从非私有方法中返回引用。
- 将一个对象传递给外部方法,相当于发布这个对象了。
- 发布一个内部类实例。内引类实例包装了对封装类实例的隐含引用
对象的安全发布
要安全发布一个静态构造的对象,最简单和最安全的方式是使用静态初始化器:
public static Holder holder = new Holder(42);