什么是“this引用逸出”?
this引用逸出是指,在类的构造方法中发布该类的对象,导致尚未构造完全的对象被其他线程访问。这样一来,不同的线程得到的可能是不同的结果,有些线程访问的是构造完全的对象,而另一些线程则会访问到尚未构造完全的对象,最终导致不可预测的错误。
下面来看2个代码示例。
public class UnSafeDemo{public UnSafeDemo(EventSource source){source.registerListener(new EventListener(){public void onEvent(Event e){doSomething(e);}});}
}
以上是this引用逸出的例子。一个类的实例化过程中,类的构造方法是最先进行实例化的,如果在构造方法进行对象发布,就会造成对象实例化尚未完成,这个尚未完全的对象就被发布的情况。
如何避免this引用逸出?我们来看下一个代码示例。
public class SafeDemo{private final EventListener listener;//在构造方法中先实现业务逻辑,但并不发布private SafeDemo(){listener = new EventListener(){public void onEvent(Event e){doSomething(e);}};}//专门用一个公共静态方法发布这个对象public static SafeDemo getInstance(EventSource source){SafeDemo safe = new SafeDemo();source.registerListener(safe.listener);return safe;}
}
以上这个例子将业务逻辑实现与发布这2个动作分离开来,避免了尚未实例化完全的对象被发布。
什么是“this引用逸出”?相关推荐
- java this 逸出_this引用逸出
1.定义 public class UnsafeClass { public UnsafeClass(Button button) { button.addActionListener(new Act ...
- Java并发编程——this引用逸出(this Escape)
http://blog.csdn.net/flysqrlboy/article/details/10607295 并发编程实践中,this引用逃逸("this"esca ...
- this 引用逸出
<Java 并发编程实践> 3.2章 发布和逸出的部分: 逸出 : 在不该发布的时候发布了一个引用; 发布:发布对象指 对象的引用在当前作用域之外的代码中使用: public class ...
- 隐式使用This 引用逸出
发布(Publish)一个对象是指使对象能够在当前作用域之外的代码中被使用.例如将指向该对象的引用保存到其他代码可以访问到的地方 ,或者在一个非私有的方法中返回一个对象的引用或者将该引用传递到其他类的 ...
- java中的逸出是什么意思,发布和逸出-构造过程中使this引用逸出
1.什么是this对象 this就是该对象实例本身 2.何为发布和逸出 发布,就是把对象暴露给他人,这就是为什么会需要用到封装,不能预料到其他第三方会如何使用对象,一不小心可能就被玩坏了 逸出,把不应 ...
- 关于this引用逸出的理解
最近在读<java并发编程实践>过程中,遇到一些难以理解的文段,其中就有关于this指针逸出的,鄙人通过百度查了很多相关信息后,总结出了自己一点点拙见,希望和大家分享,有不足的地方还望指教 ...
- java this 逸出_java如何理解隐式地使this引用逸出
最近在看<Java 并发编程实战>,个人的理解: 首先,看里面的 doSomething(e) 方法,这个方法应该是在 ThisEscape 中,不然就无法解释.也就是说,通过 doSom ...
- 逸出 java_【java】知识系谱-基础篇-线程-发布、逸出
java并发编程实战的解释,不够详细,尤其this引用逸出让人理解有些费解,java并发编程实战里面的内容就直接拷贝过来 发布:使对象能够在当前作用域之外的代码中使用 逸出:当某个不该被发布的对象被发 ...
- 《java并发编程实战》读书笔记二 对象的发布与逸出
概念 发布(publishing): 发布一个对象的意思是使它能够被当前范围之外的代码所使用.比如将一个引用存储到其他代码可以访问的地方,在一个非私有的方法中返回这个引用,也可以把它传递到其他类的方法 ...
最新文章
- 哈哈,做个广告,宁波要租房的朋友进来看看
- 高通camera驱动分析
- asp.net 日期转换
- 二维码提升对比度文献调研(4)--Attention Guided Low-light Image Enhancement
- HTML画笔移出画布停止,html5 canvas画布无法清除
- 币安选择InfStones作为以太坊2.0 Staking基础设施服务商
- 从 Angular 移植到 React,代码量减少了 20%
- 三大运营商将解决新老用户套餐不同权问题;罗永浩与抖音合作;Git 2.26发布 | 极客头条...
- 凌云一周看点 | 从运维和SRE角度看监控分析平台建设;从操作系统层面分析Java IO演进之路;机器学习落地的五个阶段...
- react组件卸载调用的方法_React组件如何还能跑得再快一点
- 基于javaweb+jsp的大学生个人财务记账系统(带报告文档)
- 算法——排序——冒泡排序图解动画
- Lena图像原图及由来
- Cell:清华程功组揭示皮肤菌群的一种气味挥发物促进黄病毒感染宿主吸引蚊虫...
- lattice planner
- NVIDIA vid2vid论文复现
- selenium:表单frame切换和句柄窗口切换
- android谷歌人脸识别,谷歌发布Android 4.0系统 支持人脸识别功能
- Excel QUARTILE函数计算逻辑
- 读书笔记 摘自:《你坏》