发布安全的对象,能使对象多线程的情况下,是安全的,不被破坏的。
所以在保证线程安全性的情况下,必须围绕这如何发布安全对象。
以下主要有三种方式能正确发布一个线程安全的对象
- 安全对象的常用发布方式:
- 静态方法初始化一个对象的引用
- 将对象引用保存到volatile类型或者AtomicReference对象中
- 声明为final类型
- 将对象的引用保存在线程安全的容器中(保存在一个由锁保护的域中)
- 不可变对象
不可变对象需要满足以下条件
- 对象创建以后其状态不能修改
- 对象所有域都是final类型
- 对象是正确创建的(this引用没有逸出)
- 线程封闭
常使用的有堆栈封闭、ThreadLocal线程封闭、Ad-hoc线程封闭等。
堆栈封闭:局部变量,无并发问题。
ThreadLocal线程封闭:推荐使用的封闭方法
Ad-hoc线程封闭:程序控制实现,可忽略。
堆栈封闭:在java运行时内存区中有一个虚拟机栈,栈封闭说的就是这个栈,这个栈是线程私有的,它的生命周期与线程相同。虚拟机栈描述描述的是java方法执行的内存模型:每个方法被执行的时候会同时创建一个栈帧用于存储局部变量、操作数栈等。每一个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中的从入栈到出栈的过程。(引用于https://blog.csdn.net/andy_gx/article/details/43387675?utm_source=tuicool)