线程同步
线程同步的三种方式
- 锁(synchronized,rentrantlock)
- 可见性(volatile,atomic)
- 变量私有化(threadlocal)
synchronized关键字
互斥锁机制,类锁和对象锁
ReentraintLock类
mLock.lock()
mLock.unLock()
volatile关键字
当我们声明volatile关键字实际上包括两层含义:
- 禁止进行指令重排序
- 当一个线程修改了某个变量的值,这个新值对其他线程立即可见
volatile关键字并不一定能够保证线程同步,需要满足下边的条件:
- 对变量的写操作不依赖当前值
- 该变量没有包含在其他变量的不变式中
上边的条件可以理解为volatile修饰的这个对象是原子性的才能保证线程同步