第三章 对象的共享

可见性

  失效数据

  非原子的64位操作:非volatile类型的64位数值变量(double和long).java内存模型要求,变量的读取和写入操作必须是原子。对于非volatile类型的long和double变量,JVM允许将64位的读写操作分解成两个32位操作

  加锁与可见性

  Volatile变量:只能保证可见性,原子性不能

发布与逸出

  发布:一个对象能够在当前作用域之外的代码使用

  逸出:某个对象不应该发布的时候被发布出去,不要在构造过程中使thsi引用逸出

线程封闭

  当访问共享的可变数据时,通常需要使用同步,一种避免使用同步的方式就是不共享数据。仅在单线程内访问数据,就不需要同步

  Ad-hoc线程封闭

  栈封闭

  Threadlocal类

不变性

  不可变对象一定是线程安全的

  满足以下条件对象才是不可变的:

    对象创建以后其状态就不能修改

    对象所有域都是final类型

    对象是正确创建的(在对象创建期间,this引用没有逸出)

安全发布

  在静态初始化函数中初始化一个对象引用

  将对象的引用保存到volatile类型的域或者AtomicReferance对象中

  将对象的引用保存到某个正确构造对象的final类型域中

  将对象的引用保存到一个由锁保护的域中

posted on 2018-10-21 17:26  胡子就不刮  阅读(105)  评论(0编辑  收藏  举报

导航