java语⾔程序设计第三版课后题答案,吊打⾯试官
1 什么是⾃旋锁和互斥锁?
由于CLH锁是⼀种⾃旋锁,那么我们先来看看⾃旋锁是什么?
⾃旋锁说⽩了也是⼀种互斥锁,只不过没有抢到锁的线程会⼀直⾃旋等待锁的释放,处于busy-waiting的状态,此时等待锁的线程不会进⼊休眠状态,⽽是⼀直忙等待浪费CPU周期。因此⾃旋锁适⽤于锁占⽤时间短的场合。
这⾥谈到了⾃旋锁,那么我们也顺便说下互斥锁。这⾥的互斥锁说的是传统意义的互斥锁,就是多个线程并发竞争锁的时候,没有抢到锁的线程会进⼊休眠状态即sleep-waiting,当锁被释放的时候,处于休眠状态的⼀个线程会再次获取到锁。缺点就是这⼀些列过程需要线程切换,需要执⾏很多CPU指令,同样需要时间。如果CPU执⾏线程切换的时间⽐锁占⽤的时间还长,那么可能还不如使⽤⾃旋锁。因此互斥锁适⽤于锁占⽤时间长的场合。
2 什么是CLH锁?
CLH锁其实就是⼀种是基于逻辑队列⾮线程饥饿的⼀种⾃旋公平锁,由于是 Craig、Landin 和 Hagersten三位⼤佬的发明,因此命名为CLH锁。linux打开脚本命令
CLH锁原理如下:
1. ⾸先有⼀个尾节点指针,通过这个尾结点指针来构建等待线程的逻辑队列,因此能确保线程线程先到先服务的公平性,因此尾指针可
以说是构建逻辑队列的桥梁;此外这个尾节点指针是原⼦引⽤类型,避免了多线程并发操作的线程安全性问题;
2. 通过等待锁的每个线程在⾃⼰的某个变量上⾃旋等待,这个变量将由前⼀个线程写⼊。由于某个线程获取锁操作时总是通过尾节点指
transient113针获取到前⼀线程写⼊的变量,⽽尾节点指针⼜是原⼦引⽤类型,因此确保了这个变量获取出来总是线程安全的。
java经典上机编程题这么说肯定很抽象,有些⼩伙伴可能不理解,没关系,我们⼼中可以有个概念即可,后⾯我们会⼀步⼀图来彻彻底底把CLH锁弄明⽩。
3 为什么要学习CLH锁?hbuilder影视源码
好了,前⾯我们对CLH锁有了⼀个概念后,那么我们为什么要学习CLH锁呢?
研究过AQS源码的⼩伙伴们应该知道,AQS是JUC的核⼼,⽽CLH锁⼜是AQS的基础,说核⼼也不为过,因为AQS就是⽤了变种的CLH 锁。如果要学好Java并发编程,那么必定要学好JUC;学好JUC,必定要先学好AQS;学好AQS,那么必定先学好CLH。因此,这就是我们为什么要学习CLH锁的原因。
如何快速更新⾃⼰的技术积累?
c语言逗号语句在现有的项⽬⾥,深挖技术,⽐如⽤到netty可以把相关底层代码和要点都看起来。
如果不知道⽬前的努⼒⽅向,就看⾃⼰的领导或公司⾥技术强的⼈在学什么。
知道努⼒⽅向后不知道该怎么学,就到处去相关资料然后练习。
学习以后不知道有没有学成,则可以通过⾯试去检验。
我个⼈觉得⾯试也像是⼀场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为⾯试失败⽽灰⼼、丧失⽃志。也不要因为⾯试通过⽽沾沾⾃喜,等待你的将是更美好的未来,继续加油!光盘无法访问 函数不正确
以上⾯试专题的答⼩编案整理成⾯试⽂档了,⽂档⾥有答案详解,以及其他⼀些⼤⼚⾯试题⽬,有需要的朋友
[外链图⽚转存中…(img-lCyVUXdh-1626037470553)]
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论