Java并发3.2-发布和逸出

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

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

3.发布对象的方式:

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

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

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

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

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

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

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值