安全发布对象的四种方法
在静态初始化函数中初始化一个对象引用
将对象的引用保存到volatile类型域或者AtomicReference对象中
将对象的引用保存到某个正确的构造对象的final类型域中
将对象的引用保存到一个由锁保护的域中
创建对象的步骤
检测类是否被加载
当虚拟机运行到new操作时,会到常量池中寻找该类的符号,若没有则需要调用类加载器加载类,加载后存入方法区–存放已加载的类信息
分配内存
初始化对象 执行构造方法
设置实例指向刚分配的内存 –与上一步可重排序
不可变对象需要满足的条件
- 对象创建以后其状态就不能改变
- 对象所有域都是final类型
- 对象是正确创建的(在对象创建之间this引用没有被逸出)