【沙龙】51CTO诚邀您9月23号和多位技巧大年夜咖一路聊智能CDN的优化之路,抓紧时光哦!

引子
之前的文┞仿我们商量了激发线程安然的原因主如果因为多线程的对共享内存的操作导致的可见性或有序性被破坏,大年夜而导致内存一致性的缺点。
我们一般应用这几种方法:
- 线程封闭
- 弗成变对象
- 同步
修改后的例子
宣布和逸出
在此之前 我们先来懂得一下宣布和逸出的概念。
宣布是指让对象在当缁?用域之外应用,例如将对象的引用传递到其他类的办法,在一个办法中返回其引用等。
在很多情况下我们要包管内部对象不被宣布,宣布一些内部状况可能会破坏封装性,让应用者可以随便改变其状况,大年夜而破坏线程安然。
而在某些情况下,我们又须要宣布某些内部对象,如不雅须要线程安然的情况下,则须要精确的同步。
当一个对象在不该该被宣布的时刻宣布了,这种情况就叫逸出。
- public class Escape {
- private List<User> users = Lists.newArrayList();
- public List<User> getUsers() {
- return users;
- }
- public void setUsers(List<User> users) {
- this.users = users;
- }
- }
getUsers已经逸出了它的感化域,这个私有变量被宣布了,因为任何调用者都可能修改数组。
- public class OuterEscape {
- private String str = "Outer's string";
- public class Inner {
- public void write() {
- System.out.println(OuterEscape.this.str);
- }
- }
- public static void main(String[] args) {
- OuterEscape out = new OuterEscape();
- OuterEscape.Inner in = out.new Inner();
- in.write();
- }
- }
在内部类中保存了一个指向创建该内部类的外围类的引用,所以内部类中可以应用创建该内部类的外围类的私有属性、办法。
- public class ConstructorEscape {
- private Thread t;
- public ConstructorEscape() {
推荐阅读
【沙龙】51CTO诚邀您9月23号和多位技巧大年夜咖一路聊智能CDN的优化之路,抓紧时光哦! 互联网成长异常敏捷,所以我们创造了Web平台。平日 我们会忽视连通性等问题,但用户们却不会熟视无睹>>>详细阅读
本文标题:Java并发编程之并发代码设计
地址:http://www.17bianji.com/lsqh/37528.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示