高并发锁优化,java锁synchronized原理
终极管理员 知识笔记 135阅读
在java中偏向锁是默认开启的绝大多数 情况下对于加锁的程序大多都会有两个以上的线程去竞争如果开启偏向锁反而会加剧锁的资源消耗可以通过jvm参数启动或关闭偏向锁

-XX:-UseBiasedLocking false //偏向锁的启动延迟默认为5秒可以取消这个延迟XX:BiasedLockingStartUpDelay0
2.2 轻量级锁 当多个线程竞争同一个锁时偏向锁将转化为轻量级锁。轻量级锁通过CASCompare and Swap操作来尝试获取锁而不会让线程阻塞。如果CAS操作成功线程获得锁否则线程将升级为重量级锁。轻量级锁是由偏向锁升级而来它考虑的情况是竞争锁的线程不多而且线程持有锁的时间也不长的情景。轻量级锁能够提升程序性能的依据是“对绝大部分的锁在整个同步周期内都不存在竞争”。轻量级锁加锁流程如下图所示。

当轻量级锁无法满足需求多个线程仍然竞争同一个锁时锁会升级为重量级锁。在这种情况下线程将阻塞直到获取锁。
2.4 各种锁对比参考
链接
标签: