何为重量级锁
synchronized在jdk1.6之前,一直都是重量级锁。为什么称之为重量级锁呢,主要是因为锁的资源是通过操作系统去申请 ,所以比较重量级。...偏向锁的加锁
当一个线程访问同步块并获取锁时, 会在锁对象的对象头和栈帧中的锁记录里存储锁偏向的线程ID, 以后该线程进入和退出同步块时不需要进行CAS操作来加锁和解锁, 只需要简单的测试一下锁对象的对象头的...轻量级锁加锁
线程在执行同步块之前, JVM会先在当前线程的栈帧中创建用户存储锁记录的空间, 并将对象头中的MarkWord复制到锁记录中....此时为了提高获取锁的效率, 线程B会循环去获取锁, 这个循环是有次数限制的, 如果在循环结束之前CAS操作成功, 那么线程B就获取到锁;如果循环结束依然获取不到锁, 则获取锁失败, 对象C的MarkWord...中的记录会被修改为重量级锁, 然后线程B就会被挂起, 之后有线程D来获取锁时, 看到对象C的MarkWord中的是重量级锁的指针, 说明竞争激烈, 直接挂起.