Mark一下这篇文章
http://m.blog.csdn.net/article/details?id=10607295
并发编程实践中,this引用逃逸("this"escape)是指对象还没有构造完成,它的this引用就被发布出去了。这是危及到线程安全的,因为其他线程有可能通过这个逸出的引用访问到“初始化了一半”的对象(partially-constructed object)。这样就会出现某些线程中看到该对象的状态是没初始化完的状态,而在另外一些线程看到的却是已经初始化完的状态,这种不一致性是不确定的,程序也会因此而产生一些无法预知的并发错误
这个链接中this逃逸的两个条件如下
它需要满足两个条件:一个是在构造函数中创建内部类(EventListener),另一个是在构造函数中就把这个内部类给发布了出去(source.registerListener)
发布出去的内部类对象自带对外部类this的访问权限。
所以在使用内部类的时候,在外部类写构造方法并且在构造方法中new InnerClass()的时候,需要避免发布这个内部类对象,否则会破坏外部类对象的构造方法的一致性问题
网友评论