Java自旋锁

自旋锁的介绍

自旋锁是指线程在获取锁的时候,当前锁被其他线程占用还未释放,那么当前线程会进入循环(for循环,while循环),一直重复获取锁的状态,而不会进入挂起或者睡眠等状态。当锁被释放后,当前线程获取到该锁的执行权,则会跳出循环执行相关代码。

自旋锁的优缺点

优点: 自旋情况下可以减少上下文之间的切换。
缺点: 一直循环会增加CPU的消耗。

自旋锁&&非自旋锁的区别

自旋锁:自旋锁的意思就是自我旋转,在Java中就是进行循环,通过循环不停的获取锁的状态,线程不需要挂起或者睡眠等待,不需要通过系统唤醒。这种带来的好处是:因为线程的阻塞和唤醒是需要资源开销的,如果线程所执行的任务(代码)并不是很复杂,那么在这种情况下,线程切换带来的资源消耗比执行任务的消耗更大。
非自旋锁:就是当线程需要获取锁的时候,如果锁被其他线程占用,那么当前线程会进行等待挂起。需要通过CPU进行唤醒。

总结

由于自旋锁只是在当前线程不停的执行循环体,不需要进行线程状态的切换,因此相应时间很快,但是随着线程数量的增加,效率则会显著降低,因为每个线程都需要消耗CPU性能。所以,如果线程竞争不是很激烈,且锁的持有时间不是很长,这种情况下可以使用自旋锁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值