1、Synchronized基本特性回顾
应用场景:多线程环境下保证线程的安全性。
使用方式:
1)Synchronized加在普通方法上,使用的是this锁,也就是当前对象
2)Synchronized加在静态方法上,使用的是class字节码作为锁
3)Synchronized加在代码块,可以以任何对象作为锁
Synchronized锁会关联一个对象 monitor对象
Synchronized是一个Java关键字 Java对象 转 C代码 转 汇编。
2、Synchronized monitor对象源码解读
每个 Java 对象都可以关联一个 Monitor 对象,如果使用 synchronized 给对象上锁(重量级)之后,该对象头的Mark Word 中就被设置指向 Monitor 对象的指针。
Synchronized的锁对象的对象头中的Mark Word会关联一个monitor对象。这个monitor对象不是我们主动创建的,是JVM的线程执行到这个同步代码块,发现锁对象没有monitor就会创建monitor,monitor内部有两个重要的成员变量:
【owner】记录拥有这把锁的线程;
【recursions】记录线程拥有锁的次数(