java中的锁和升级过程

java中的锁大概有3中,重量级锁,轻量级锁和偏向锁
现在来说一下他们的区别:
什么是重量级锁?
要搞清楚重量级锁,首先你要知道java 的内存模型。 jdk1.8 后 java使用的是HotSopt 内存模型。当你在启动一个线程的时候操作系统对应的会启动一个线程。 而当你在线程上加锁的时候,把这个加锁任务交个操作系统去做,这就是重量级锁。

什么是轻量级锁?
轻量级锁其实不是锁,用的是CAS -> compare and swap (比较并更新)
当多个线程同时拿到 A=1,并且都要对做 A+1 操作的时候,每个线程都记录上一次读取到A 的值,在修改是再拿出A 对比一下是不是和上次的一样,如果是就更新操作,否则再读取一次并做修改。 如此循环。cpu需要管理线程的循环状态。

什么是偏向锁?
偏向锁不是锁,偏向锁更像一个标签,标志。被偏向的线程会告诉其他线程,你们别抢了,这个任务由我来完成。 因为大部分情况下,即使我们使用了加锁操作,其实仍然是当线程在运行,所以减少线程竞争,加个偏向锁。

锁的状态会发生变化吗?
这3种锁都有对应的应用场景。
当一个线程在运行的时候使用偏向锁可以节省线程切换带来的消耗。
当少量线程竞争时会升级成轻量级锁,每个线程采用自旋的方式来工作。
当大量线程竞争时如果还用线程自旋的话cpu显然就会忙不过来,这个时候就需要升级重量级锁。
重量级锁是由操作系统将资源放到一个队列里面进行管理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值