高并发编程之发布与溢出

发布定义

指一个对象可以在对象的作用域范围以外使用。

溢出定义

当某个不应该发布的对象被发布时称为溢出。

最常见的案例是将对象的引用保存在共有的静态变量之中

for example:

public static  set<Secrect>  sets;

public void init(){

this.sets=new HashSet<Secrect>();

}

这个时候当发布Secrect对象时,其实会间接发布sets对象。因为任何代码都可以遍历这个sets对象并获取到新发布的secrect对象。

再看一个案例:

public class unsafeClass{

private String[] states=new String[]{"a","b"};

public String[] getState(){

return states;

}

如果按照上述方式发布states就会出现问题,因为任何调用者都可以修改states内容;这个时候其实states已经溢出了它所在的作用域,这个本应是私有的变量被发布了

}

原文地址:https://www.cnblogs.com/zhangfengshi/p/9558497.html