多线程各种锁总结
发布日期:2022-04-11 08:52:59 浏览次数:11 分类:技术文章

本文共 584 字,大约阅读时间需要 1 分钟。

1、重量级锁

获取不到锁就马上进入阻塞状态的锁,称之为重量级锁。

2、自旋锁

自旋锁就是,如果此时拿不到锁,它不马上进入阻塞状态,而是等待一段时间,看看这段时间有没其他人把这锁给释放了。怎么等呢?这个就类似于线程在那里做空循环,如果循环一定的次数还拿不到锁,那么它才会进入阻塞的状态。
至于是循环等待几次,这个是可以人为指定一个数字的。

3、自适应自旋锁

而自适应自旋锁就牛逼了,它不需要我们人为指定循环几次,它自己本身会进行判断要循环几次,而且每个线程可能循环的次数也是不一样的。经常拿锁的循环次数多、很少拿锁的循环次数少。(空循环会消耗CPU)

4、轻量级锁

进入一个方法的时候根本就不用加锁,用一个变量来记录此时该方法是否有人在执行。如果这个方法没人在执行,当我们进入这个方法的时候,采用CAS(compareAndSet)机制,把这个方法的状态标记为已经有人在执行,退出这个方法时,在把这个状态改为了没有人在执行了。

5、偏向锁

偏向锁会记录首次进入的线程的ID,再次进入会做判断ID是否相同,相同则不需要进行操作。

6、悲观锁

最开始我们说的三种锁,重量级锁、自旋锁和自适应自旋锁,进入方法之前,就一定要先加一个锁,这种我们为称之为悲观锁。

7、乐观锁

例如 CAS 机制,上面说的轻量级锁,就是乐观锁的。不会马上加锁,而是等待真的出现了冲突,在想办法解决。

转载地址:https://blog.csdn.net/qq_49477533/article/details/123885604 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:多线程合集(一)---信号量,锁,以及并发编程,自定义任务调度和awaiter
下一篇:多线程可能带来的问题

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月19日 04时22分19秒