发布逸出

(1)发布:发布是指将一个对象,使其引用储存到一个其他代码可以访问到的地方,在一个非私有方法返回这个引用,也可以把它传递到其他对象中.

a)  发布最简单的就是将对象设置到公共静态域中

b)  发布第二种简单的方式就是在一个公共方法内直接return 对象的引用

第三种的发布就很隐秘了.就是讲自身的对象引用发布到另一个对象的引用中.
可能在构造中出现如此这就是this例如:

这样 source就持有ThisEscape的内部类EvenListener()而Evenlistener可能会带出ThisEscape中的保护数据引用,可以使用工厂和私有构造防止发布逸出,这样ThisEscape对象就可以构造完成然后使用ThisEscape.registerListener(source)放入监听器.最好不要在构造内注册监听器或者启动线程.而在工厂内初始化这些事情.

class A1{public EventListener l;
}public class MyThread{EventListener l=null;private MyThread(){l=new EventListener() {};}public static MyThread newInstance(A1 a){MyThread my=new MyThread();       a.l=my.l;return my;}
}

其实A1中的l我没有封装.应该加以封装.我只是掩饰下如何注册

(2)逸出:如果对象在没有构造完成前就将其发布,这就是逸出.在构造中启动线程,会使未构造完成的对象发布出去,造成逸出.

(3)如何安全的发布:

a)  通常发布线程与消费线程需要同步化.

b)  通过静态初始化初始对象的引用.

c)  引用储存到volatile或者AtomicReference

d)  引用储存到正确创建对象的final域中

(4)如果需要发布一个非线程安全的状态集(就是包含基本类型的对象),可以先复制对象,然后发布复制后的对象.这样避免外来客户修改非线程安全的类.造成同步错误.这前提是不需要此集合状态在多个线程间一致.

(5)发布一个线程安全的类,并不需要复制-发布.

(6)可以安全的发布一个线程安全的类并且发布时不需要有任何我约束行为

Java并发学习笔记(8)发布逸出相关推荐

  1. 20W字纯手打Java并发学习笔记,助力你金三银四,决战春招,必进大厂

    假如阿里给了你这个机会,你却卡在三面,你会不会懊恼? 假如阿里真的让你通过,只需要你把这一块技能的底层原理摸透,你学不学? 我有一个朋友,他小厂背景.15年毕业.普通学校,这看起来确实没什么战斗力,但 ...

  2. Java并发学习笔记:ReentrantLock

    锁的获取主要是这两个函数,当然还有 lockInterruptibly( ) 和 tryLock(long timeout, TimeUnit unit) 这种响应中断和带时间限制的函数,不过和普通的 ...

  3. java this 逸出_发布逸出 java this 逸出【转】

    转自:http://blog.csdn.net/joker_zhou/article/details/7322801 (1)发布:发布是指将一个对象,使其引用储存到一个其他代码可以访问到的地方,在一个 ...

  4. 分布式系统 概念 高可用 高并发 学习笔记

    分布式系统 概念 高可用 高并发 学习笔记 0. 分布式系统基本概念 0.1 背景 分布式系统是由一组通过网络进行通信.为了完成共同的任务而协调工作的计算机节点组成的系统.分布式系统的出现是为了用廉价 ...

  5. 尚学堂JAVA高级学习笔记_1/2

    尚学堂JAVA高级学习笔记 文章目录 尚学堂JAVA高级学习笔记 写在前面 第1章 手写webserver 1. 灵魂反射 2. 高效解析xml 3. 解析webxml 4. 反射webxml 5. ...

  6. 可能是最全面的 Java G1学习笔记

    转载自 可能是最全面的 Java G1学习笔记 引子 最近遇到很多朋友过来咨询G1调优的问题,我自己去年有专门学过一次G1,但是当时只是看了个皮毛,因此自己也有不少问题.总体来讲,对于G1我有几个疑惑 ...

  7. 深入浅出 Java CMS 学习笔记

    转载自  深入浅出 Java CMS 学习笔记 引子 带着问题去学习一个东西,才会有目标感,我先把一直以来自己对CMS的一些疑惑罗列了下,希望这篇学习笔记能解决掉这些疑惑,希望也能对你有所帮助. 1. ...

  8. 转载:mongoDB java驱动学习笔记

    http://www.blogjava.net/watchzerg/archive/2012/09/22/388346.html mongoDB java驱动学习笔记 指定新mongo实例: Mong ...

  9. java多线程学习笔记。

    java多线程学习笔记 线程的优缺点: 多线程的好处: 充分利用多处理核心,提高资源的利用率和吞吐量. 提高接口的响应效率,异步系统工作. 线程的风险: 安全危险(竞争条件):什么坏事都没有发生.在没 ...

最新文章

  1. 【Java面试题】37 说出ArrayList,Vector, LinkedList的存储性能和特性
  2. 《Arduino实战》——第1章 你好Arduino
  3. 计算机网络第六章ppt课件,计算机网络与通信(第6章).ppt
  4. Linux常用命令英文全称与中文解释Linux系统
  5. OpenGL反射和折射
  6. win10系统开不了机
  7. python中布尔类型是特殊的_Python中的特殊方法以及应用详解
  8. Android屏幕大小适配问题解决
  9. 编译原理教程_8 静态语义分析和中间代码生成
  10. 【CNN】很细的讲解什么以及为什么是卷积(Convolution)!
  11. IntelliJ IDEA 中 右键新建时,选项没有Java class
  12. 什么是网络,网络类型,网络结构
  13. A4纸在屏幕上的像素尺寸
  14. RationalDMIS 2020定制报告(EXCEL)
  15. 华为mate40pro和华为mate30pro的区别
  16. 使用jr-qrcode插件生成图片格式的二维码
  17. 2021-08-25 新手创建bt面板并创建网站
  18. [代码解读]基于多代理RL的车联网频谱分享_Python实现
  19. 2022年版中国煤矿安全设备市场投资规划及需求前景预测报告
  20. 车架号/vin码识别

热门文章

  1. jackson多态序列化与反序列化
  2. 佳能 5D4 设置与使用建议(二)
  3. 较好的Mac破解软件下载地址
  4. C语言,1000以内素数排序10个为一行
  5. Jmeter操作数据库详解
  6. SVN使用中的一个问题
  7. GitHub地址是什么?哪里看?
  8. 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
  9. 数学专业英语词汇英汉对照
  10. 数据中心机架与服务器,数据中心服务器机架是什么?如何选购?