JAVA--并发的线程安全处理(二)--如何安全发布对象

发布安全的对象,能使对象多线程的情况下,是安全的,不被破坏的。

所以在保证线程安全性的情况下,必须围绕这如何发布安全对象。

以下主要有三种方式能正确发布一个线程安全的对象

  • 安全对象的常用发布方式
  1. 静态方法初始化一个对象的引用
  2. 将对象引用保存到volatile类型或者AtomicReference对象中
  3. 声明为final类型
  4. 将对象的引用保存在线程安全的容器中(保存在一个由锁保护的域中)

 

  • 不可变对象

  不可变对象需要满足以下条件

  1. 对象创建以后其状态不能修改
  2. 对象所有域都是final类型
  3. 对象是正确创建的(this引用没有逸出)

 

  • 线程封闭

  常使用的有堆栈封闭ThreadLocal线程封闭、Ad-hoc线程封闭等。

  堆栈封闭:局部变量,无并发问题。

  ThreadLocal线程封闭:推荐使用的封闭方法

  Ad-hoc线程封闭:程序控制实现,可忽略。

  

  堆栈封闭:在java运行时内存区中有一个虚拟机栈,栈封闭说的就是这个栈,这个栈是线程私有的,它的生命周期与线程相同。虚拟机栈描述描述的是java方法执行的内存模型:每个方法被执行的时候会同时创建一个栈帧用于存储局部变量、操作数栈等。每一个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中的从入栈到出栈的过程。(引用于https://blog.csdn.net/andy_gx/article/details/43387675?utm_source=tuicool)

  

  

posted @ 2018-04-23 22:57  茶中酒李志杰也  阅读(118)  评论(0编辑  收藏  举报