Java并发3.2-发布和逸出

1.发布的概念:能够使对象在创建它的范围之外的地方所使用。

2.逸出的概念:一个对象在尚未准备好时就将它发布。

3.发布对象的方式:

a) 将对象存储到(赋值)公共静态域。

b) 发布一个对象(此对象起容器的作用)还会间接的发布其他对象。

c) 从非私有方法返回引用,也能发布返回对象(返回值的方式)。

d) 更一般,在已经发布一个对象中,那些非私有域的引用链,和方法调用链中可获得的对象也会被发布。

e) 最后一种发布对象和它的内部状态机制是发布一个内部类实例(this逸出)。

4.法则:不能让this引用在构造期间逸出。

一个导致this引用在构造期间逸出的常见例子:在构造函数中启用一个新线程,此时this引用几乎总是被新线程所共享(构造函数中新线程的启用)

另一个例子(没有看懂):在构造函数中调用一个可以覆盖的(实例)方法同样会导致this在构造期间逸出(是不是指的监听器)。

解决方案:如果在构造函数中注册监听器或启动线程,你可以使用一个私有的构造函数和一个公共的工厂方法。

5.风险意识。其他线程是否真的会利用发布的引用做些什么并不重要,因为无论如何,被误用的风险是存在的。

猜你喜欢

转载自blog.csdn.net/lvxingzhe123456/article/details/41926383