对象的发布:使对象能够在当前作用域之外的代码中使用
如何安全的发布对象?
1:可变对象比如通过加锁的方式发布
2:不可变对象可以随意的被发布
可变对象必须通过安全的方式发布,这意味着发布和使用该对象的线程都必须使用同步.
要安全的发布对象,对象的状态和对象的引用必须对其他的线程可见,常见的做法有:
1:在静态初始化函数中初始化一个对象引用
2:将对象的引用保存到volatile类型域中
3:将对象的引用保存到正确构造对象的final域中
4:将对象的引用保存到一个由锁保护的域中
5:使用线程安全的容器
6:使用静态构造的对象,最简单和最安全的方式是使用静态初始化器.
public static Holder holer = new Holder(23);
原因是静态初始化器是由jvm在类的初始化阶段执行的,由于jvm内部存在同步机制,因此可以通过这种方式初始化的任何对象都可以被安全的发布.
时间: 2024-10-17 21:14:37