JAVA并发(六)对象的安全发布

本文探讨了JAVA并发中对象的不安全发布问题,重点是this逸出现象,即对象在未完全初始化时被外部访问。介绍了如何避免this逸出,如在构造器中延迟线程启动、使用工厂方法发布对象。同时,讨论了线程封闭策略,如单线程写入volatile变量、栈封闭以及ThreadLocal的使用。此外,文章还阐述了不变性在保证线程安全中的作用,强调final关键字在防止this逸出和确保final域安全性方面的意义。
摘要由CSDN通过智能技术生成

对象的不安全发布主要有:this逸出,在对象还未实例化完成时,就能被其他对象锁获取(发布)

this逸出

什么是this逸出

对于一个类C来说,“外部方法”指的是行为不完全由类C规定的方法,包括其他类定义的方法,以及类C中可以被改写的方法。当把类C的对象传递给某个外部方法时,相当于发布了该对象,此时如果C的实例未完成实例化,就称为类C的实例的this逸出。最常见的“外部方法”使用场景是在构造器中生成内部类实例

1  // 定义一个事件监听的接口
2  public interface EventListener {
   
3      void onEvent();
4  }
5
6  // 定义一个管理事件监听器类
7  public class EventSource {
   
8      private List<EventListener> source = new ArrayList<>(10);
9 
10     public void registerListener(EventListener listener) {
   
11         try {
   
12              Thread.sleep(500L);
13         } catch (InterruptedException e) {
   
14              e.printStackTrace();
15         }
16         listener.onEvent(); //假设listener注册500ms就被调用了
17         source.add(listener);
18     }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值