synchronized原理
2018-10-13,本文 399 字,阅读全文约需 2 分钟
syncronized
JMM关于synchronized的两条规定:
1)线程解锁前,必须把共享变量的最新值刷新到主内存中
2)线程加锁时,将清空工作内存中共享变量的值,从而使用共享变量时需要从主内存中重新获取最新的值
(注意:加锁与解锁需要是同一把锁)
加锁
在HotSpot JVM中 锁被称作对象监视器
- 方法 public synchronized void demo1(){};
实例锁,,同一个实例等待锁释放
测试代码
测试结果,使用屏障等待其他线程一起到达屏障点,只能有一个线程到达
- 实例 synchronized(this){};
实例锁,,同一个实例等待锁释放
测试方式与方法的一样
- 类 synchronized(Class.class){};
全局锁,不管是同一个实例,还是所有其他实例对象都不能操作
- 对象 synchronized(obj){};
对象锁,看这个对象的位置,唯一就是全局锁,类中的成员对象就是实例锁