1.publish一个对象,是指使对象能够在当前作用域之外的代码中使用。例如:将一个对象的引用保存到其他代码可以访问的地方。
public static Set<Secret> knowSecrets;
public void initialize() {
konwSecrets = new HashSet<Secret>();
}
此时,如果将一个Secret对象添加到konwSecrets中,则表示发布了konwSecrets这个对象。
- 如果从非私有的方法中返回一个引用,那么同样会发布返回的对象。例如:
class UnsafeStates {
private String[] states = new String[]{"test1","test2"};
public Stirng[] getStates() {
return states;//这里发布了states这个对象
}
}
此时,UnsafeStates类并不是线程安全的,因为states这个对象被发布了,已经发布出去的东西,就由不得UnsafeStates类来控制了,这就出现的对象逸出问题,这个逸是逃逸的逸,意思是逃出了states的作用域。举个例子:比如你的csdn密码,别人非法获得了,然后贴到某个论坛上,这时,你的密码就逸出了,它被别人拿来做什么,完全不受你控制了~