请稍等 ...
×

采纳答案成功!

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

明wait只释放当前的那把锁的问题

悟空老师,你好。在讲解wait只释放当前的锁的时候,您使用的代码案例类是WaitNotifyReleaseOwnMonitor 。 thread1中已经使用了wait()释放了锁,并且在thread2中获取到了,并且thread1因为调用了wait()方法,使得thread1一直占用着resourceA这把锁,一直处于等待状态,并且resourceA.wait()是在synchronized(resourceB){} 代码块中,证明thread1线程的一直占用着resourceB这把锁,所以在thread2线程对象中执行不了resourceB中的代码。 我这样理解对吗?

本实例代码,如果我想让代码正常退出,这个代码应该如何改进?我尝试的改进了,就是在thread2的resourceA代码块中使用了resourceA.notify(),但是程序依然退出不了

正在回答 回答被采纳积分+3

1回答

悟空 2020-05-18 01:07:17

你的理解对的。不过有一句话我没看懂:“并且thread1因为调用了wait()方法,使得thread1一直占用着resourceA这把锁”。这里调用wait方法是会释放锁的。

关于程序退出:只唤醒A是不够的,因为唤醒时,线程2还持有锁A,要等线程2释放后,线程1才能拿到锁并退出,但是线程2没有机会释放,因为线程2想拿锁B,形成死锁。

0 回复 有任何疑惑可以回复我~
  • 提问者 慕神3666074 #1
    悟空老师,可以加你的微信或者QQ吗?
    回复 有任何疑惑可以回复我~ 2020-05-18 19:51:30
  • 悟空 回复 提问者 慕神3666074 #2
    可以 进课程的QQ群哈  我在里面
    回复 有任何疑惑可以回复我~ 2020-05-18 21:18:17
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号