java中定义了非常多的锁,很多同学面试对于锁,感觉非常茫然,于是源码的老师决定,将这些锁拆分开来注意分析讲解,这篇千锋重庆Java培训机构的小编先聊聊自旋锁
-
自旋锁是基于CAS实现
-
synchronized重量级锁是基于系统内核
-
为什么出现自旋锁
jvm发现一个问题,多个线程共享资源的时间片段是及其短暂的,如果为了这点时间片段,我们采用基于系统内核的重量级锁,不断的,挂起线程,唤醒线程是极度的消耗资源的,于是我们就想到,如果那个线程持有共享资源的锁,谁就执行,但是如果有多个线程同时需要执行共享资源呢,自旋锁诞生了
这里对于自旋锁和系统重量级锁,我们来举一个示例说明
自旋锁:类似于我们火车站上车所,一个坑位,多个人排队,这个时候我们多个人等同一个坑位,排队转圈圈,那个人转到坑位释放,那个人就先上厕所
内核重量级锁:由于自旋锁是循环,如果循环太多,那么也是会占用CPU资源,于是当自旋锁到达一定数量的时候,目前规定是自选操作默认10次,超过10次,就会升级会重量级的锁,锁有线程不要转圈圈了,很浪费时间,于是排队,形成队列,依次进行。
- 基于CAS实现简单的自旋锁
public class SimpleLock {