智联招聘网站怎么做两份简历模板,北京智能网站建设平台,wordpress安装权限设置方法,威县企业做网站锁的状态
synchronized 在jdk1.6之前是重量级锁#xff0c;每次都要去和操作系统打交道#xff0c;而操作系统层面的操作是比较耗性能的#xff0c;需要将用户态转换为内核态。所以在jdk1.6后就有了锁的升级过程#xff0c;总共有四种状态#xff1a;无锁、偏向锁、轻量级…锁的状态
synchronized 在jdk1.6之前是重量级锁每次都要去和操作系统打交道而操作系统层面的操作是比较耗性能的需要将用户态转换为内核态。所以在jdk1.6后就有了锁的升级过程总共有四种状态无锁、偏向锁、轻量级锁、重量级锁。从无锁到重量级锁锁的粒度在不断加大而且锁的升级过程是不可逆的。
锁的升级过程 无锁
线程执行非同步方法不加锁通过不断自旋进行对资源的修改操作只有一个线程能操作成功。
偏向锁
线程进入同步方法后对象头 Mark Word会记录当前线程的Id此后如果还是该线程进入该同步方法就不需要再进行加锁解锁的过程了提高了性能。此外偏向锁不会自己撤销只有等有线程竞争时要升级为轻量级锁时才会撤销。 轻量级锁
线程进入同步方法获取到偏向锁后此时又有别的线程也要进来他们通过自旋的方式来回获取锁然后执行此时趋于一种相对平稳的状态就升级为了轻量级锁他们不会被阻塞而是通过自旋的方式去不断获取并执行。 重量级锁
有大量的线程此时都要获取锁由于锁的竞争非常激烈如果还是不断通过自旋的方式的话CPU会出现空转的情况会大量消耗性能所以轻量级锁就会升级为重量级锁此时就是操作系统层面来操作了通过Mutex Lock互斥量来决定哪个线程获取到锁。 原文链接https://blog.csdn.net/weixin_51453935/article/details/132133569