Java多线程,对象的发布与逸出

本贴最后更新于 2937 天前,其中的信息可能已经物是人非

Java多线程,对象的发布与逸出

 

一、概念

    在多线程中,对象的“发布(publish)”是指,使对象能够在当前作用域之外访问。如:将指向该对象的引用保存到其他代码可以访问的位置,在非私有方法中返回某个 对象的引用等。对象被发布后,意味着多个线程可以并发访问对象,就必须通过同步等机制控制对象的访问,以免造成线程安全性问题。对象的“逸出(escape)”是指,对象在不应该被发布的情况下被发布,对象要根据需要进行发布,但同时要避免对象因疏忽或代码错误意外的逸出。

 

二、发布的方式

1. 将对象的引用存到共有的静态变量中

2. 对象被间接的发布:如,对象保存在集合类中,而这个集合类被发布出去,那么,所有可以遍历此集合的地方都嫩访问集合中的对象。

3. 从非私有方法返回一个对象引用

4. 非私有属性会被发布

5. 将对象当作参数传递给外部方法。外部方法包括,其他类中的方法或者类中可以被改写的方法(既不是private也不是final修饰的方法,因为此方法可能被重写),无法保证传递给外部方法的对象如何被使用,有“逸出”的风险

6. 发布一个内部类的实例。因为内部类实例中包含了对外部类实例的引用

 

参考:

《Java并发编程实战》 - 第三章 3.2 节 发布与溢出

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3167 引用 • 8207 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...