《JAVA并发编程实践》第三章对象的共享

1 怎么理解发布和逸出?

转自别人的回答讲的很详细
点击这里

还有这里

2.如何构造一个安全的对象?

不可变的对象一定是线程安全的 
     在多线程访问这个不可变的对象时,对象的实例域都是固定不变的,也就不存在多线程环境写操作带来的失效数据的问题。
什么样的对象才是不可变的?
     对象创建后其状态就不能修改
     对象所有的域都是final类型
     对象是正确创建的,创建期间,this引用没有逸出

个人理解
public class Pojo{
    private final String name;
    private final Integer age;
    public Pojo(){
        name = "lilei";
        age = 1;
    }
}

实际的项目中碰到的都是可变的对象,那如何保证这些对象的线程安全性?
    同步

3.如何安全的发布一个对象

静态初始化函数中初始化一个对象引用
将该引用保存在 volatile 或者 AtomicReferance对象中
或者 保存到某个正确构造对象的final类型域中
或者 保存到一个由锁保护的域中
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章