Sychronized的偏向锁、轻量级锁、重量级锁,以及其与ReentrantLock的区别。

Sychronized的偏向锁、轻量级锁、重量级锁:

1、偏向锁:在锁的对象头中记录一下当前获取到该锁的线程ID,该线程下次如果又来获取锁就可以直接获取到了

2、轻量级锁:由偏向锁升级而来,当一个线程获取到锁后,此时这把锁是偏向锁,此时如果有第二个线程来竞争锁,偏向锁就会升级成轻量锁,轻量锁底层是通过自旋而来,并不会阻塞线程。

3、如果自旋锁次数过多没有获得轻量锁,则会升级成重量级锁,重量级锁会导致线程的阻塞。

4、自旋锁:自旋锁就是线程在获取锁的过程中,不会去阻塞线程,也就无所谓唤醒线程,阻塞和唤醒这两个步骤都是需要操作系统去完成的,比较消耗时间,自旋锁是线程通过CAS获取预期的一个标记,如果没有获取到,则继续循环获取,如果获取到了,则表示获取到了锁,这个过程线程一直运行,相对而言没有使用太多的操作系统资源,比较轻量。

Sychronized与ReentrantLock的区别:

1、sychronized是一个关键字,ReentrantLock是一个类。

2、sychronized会自动的加锁和释放锁,ReentrantLock需要程序员手动加锁和释放锁资源。

3、sychronized的底层是JVM层面的锁,ReentrantLock是API层面的锁。

4、sychronized是非公平锁,ReentrantLock可以选择公平锁或非公平锁。

5、sychronized锁的是对象,锁的信息保存在对象头中,ReentrantLock通过代码中int类型的state标识来标记锁的状态。

6、sychronized底层有一个锁升级的过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值