4 个回答
总结一下:
只有一个线程进入临界区,偏向锁
多个线程交替进入临界区,轻量级锁
多线程同时进入临界区,重量级锁
发布于:2年前 (2023-03-16) IP属地:四川省
重量级锁用到monitor对象,而偏向锁则在Mark Word记录线程ID进行比对,轻量级锁则是拷贝Mark Word到Lock Record,用CAS+自旋的方式获取。
发布于:2年前 (2023-03-16) IP属地:四川省
在轻量级锁状态下,当前线程会在栈帧下创建Lock Record,LockRecord 会把Mark Word的信息拷贝进去,且有个Owner指针指向加锁的对象,线程执行到同步代码时,则用CAS试图将Mark Word的指向到线程栈帧的Lock Record,假设CAS修改成功,则获取得到轻量级锁,假设修改失败,则自旋(重试),自旋一定次数后,则升级为重量级锁
发布于:2年前 (2023-03-16) IP属地:四川省
偏向锁指的就是JVM会认为只有某个线程才会执行同步代码(没有竞争的环境),所以在Mark Word会直接记录线程ID,只要线程来执行代码了,会比对线程ID是否相等,相等则当前线程能直接获取得到锁,执行同步代码,如果不相等,则用CAS来尝试修改当前的线程ID,如果CAS修改成功,那还是能获取得到锁,执行同步代码,如果CAS失败了,说明有竞争环境,此时会对偏向锁撤销,升级为轻量级锁。
发布于:2年前 (2023-03-16) IP属地:四川省
我来回答
您需要 登录 后回答此问题!