请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于锁的问题

悟空老师,学习锁后我有两个疑问,盼解惑
1.自旋 和 非阻塞锁是一个概念吗? 我的理解同样无法获取锁,自旋是占着cpu不断检测锁,而非阻塞是让线程先去干别的事情,感觉不是一个概念啊。
2.我在看<<java并发编程的艺术>>时发现 它写的时lock锁对可中断锁的解释是 获取到锁的线程如果被中断会释放锁,可是您讲的是等待获取锁时可以响应中断。

谢谢老师

正在回答

1回答

悟空 2020-02-13 15:06:31

第一个问题,自旋和非阻塞,不是同样的概念,但是可以同时成立,又是自旋,又是非阻塞。

第二个问题,我看了《java并发编程的艺术》,我认为他描述的不准确:

https://img1.sycdn.imooc.com//szimg/5e44f5470904efe315580376.jpg

你觉得哪种锁线程被中断就会释放锁?据我所示,是需要unlock才能释放锁的。我认为那本书的作者想表达的意思和我讲课的内容是一致的,但是他笔误了。

2 回复 有任何疑惑可以回复我~
  • 提问者 sadcloud #1
    老师我这样理解对吗   引起lock锁的线程释放锁的是抛出没有try-catch的异常,而不是中断。而synchronized也可以因为抛异常而释放锁,所以这点并不能作为Lock锁相对于synchronized的升级。而体现lock锁可中断性的应该是等待获取锁时被中断会释放锁的特性。
    回复 有任何疑惑可以回复我~ 2020-02-13 18:17:01
  • 悟空 回复 提问者 sadcloud #2
    我认同“体现lock锁可中断性的应该是等待获取锁时被中断会释放锁的特性”。
    引起lock释放的是在finally里面的unlock。
    这一点,synchronized是比Lock更好用的,因为synchronized发生异常会自动释放锁,但是Lock不会。
    回复 有任何疑惑可以回复我~ 2020-02-13 19:25:25
  • 提问者 sadcloud 回复 悟空 #3
    老师那使用lock锁时 等待线程可以强制要求获得锁的线程放弃锁吗
    回复 有任何疑惑可以回复我~ 2020-02-13 19:36:19
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信