并发编程-3 对象的共享

同步的作用

  • 1、确保以原子的方式执行操作:防止读取正在被修改的状态变量
  • 2、 内存可见性:确保一个线程修改了对象状态后,其他线程可以看到
    ** 可以通过使用【同步】或是类库中内置的同步来保证对象被安全的发布**

3.1 可见性

失效数据

非原子的64位操作

加锁与可见性:所有执行读操作或是写操作的线程都必须在同一个锁上同步

volatile

  • 可以参考这篇文章http://www.importnew.com/18126.html
并发编程-3 对象的共享_第1张图片

发布与逸出

  • 发布(publish)是一个对象可以在当前作用域之外的地方被引用到
  • 逸出(Escape)当某个不该被发布的对象被发布时,称为逸出
  • 发布一个对象时,对象内部非私有域中引用的所有对象都会被发布
  • 当把一个对象传给外部方法时,这个对象已经被发布
  • 发布一个内部类的时候,这个类本身也被发布
  • 不要再构造过程中使得this引用逸出

线程封闭

  • 线程封闭(Thread Confinement):如果只在单线程内访问数据,就不需要同步
  • 常见的线程封闭对象:1、JDBC 中的connection对象;2、java中的局部变量;3、java中的ThreadLocal变量

不变性

  • 满足同步需求的另外一个做法是使用不可变对象(Im'mutable Object)
  • 不可变对象一定是线程安全的
并发编程-3 对象的共享_第2张图片

安全发布

你可能感兴趣的:(并发编程-3 对象的共享)