内部类的隐式使用this逸出问题

原文解决

http://stackoverflow.com/questions/1588420/how-does-this-escape-the-constructor-in-java

例如: 在一个构造方法中,你创建了一个EventListener内部类(它隐含的引用了当前对象this的方法),并注册到一个监听中。

》因此你的对象就可能被另一个线程使用,尽管它没有完成初始化。 

public class A {

  private boolean isIt;
  private String yesItIs;

  public A() {
    EventListener el = new EventListener() { ....};
    StaticListeners.register(el);
    isIt = true;
    yesItIs = "yesItIs";
  }
}


之后可能发生的另外一个问题是:对象A可能被创建完成,所有线程都可以访问A。某个线程访问到的A对象已经创建,yesItIs的值是“yesItIs”,但是isIt是false。不管你相信与否,它都有可能发生。 
发生的情况是:同步仅仅是阻塞线程的一部分,另部分线程间可见性。 
Java这样做的原因是性能问题:如果所有线程都共享所有数据,线程间的可见性可能损害性能,因此仅仅是同步的数据可以被线程共享。

在使用的时候,尽可能的避免外部类改变内部类的状态 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值