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类型域中
或者 保存到一个由锁保护的域中