线程同步

线程同步的三种方式

  • 锁(synchronized,rentrantlock)
  • 可见性(volatile,atomic)
  • 变量私有化(threadlocal)

线程同步的方式

synchronized关键字

互斥锁机制,类锁和对象锁

ReentraintLock类

mLock.lock()

mLock.unLock()

volatile关键字

当我们声明volatile关键字实际上包括两层含义:

  1. 禁止进行指令重排序
  2. 当一个线程修改了某个变量的值,这个新值对其他线程立即可见

volatile关键字并不一定能够保证线程同步,需要满足下边的条件:

  1. 对变量的写操作不依赖当前值
  2. 该变量没有包含在其他变量的不变式中

上边的条件可以理解为volatile修饰的这个对象是原子性的才能保证线程同步

atomic原子类

本地变量ThreadLocal