请稍等 ...
×

采纳答案成功!

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

Lock的await和signal是如何工作的?

老师你好,我想先跟你说一下我看完前几节的理解

就是synchronized是通过获得某一对象o的monitor锁的方式进行同步,同时也是通过这个对象o,调用wait() 和 notify()来唤醒等在这个对象o的waitset里的线程是么?

然后我的问题是Lock类用的是AQS这个框架,然后没用到monitor,那他的condition对象是怎么知道通知谁呢?比如这里readDb中的代码

if (queue.size() == MAX) {
	full.await();
	return;
}
...
if(queue.size() == 1) {
	emtpy.signalAll();
}

我们新建了n个生产者线程,他是怎么知道生产者线程是等在full这个condition上的?还是说内部实现的时候就是当生产者走进了第一个条件,也就是queue.size() == MAX,然后full.await()它就会自动吧生产者的线程跟full这个绑定?或者说full这个condition内部也会有一个类似于waitset的东西,他会把生产者的线程都放进去?

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

1回答

求老仙 2021-04-27 09:49:26

aqs体系也实现了信号,条件等等。具体来说,和monitor机制有点像,其实还是我讲的链表实现的队列。

0 回复 有任何疑惑可以回复我~
  • 提问者 hellocp7 #1
    了解,所以这个面试当中一般不会做要求是么
    回复 有任何疑惑可以回复我~ 2021-05-01 15:37:20
  • 求老仙 回复 提问者 hellocp7 #2
    AQS的重要程度会 > Monitor。 还有它们共性的原理需要掌握。
    回复 有任何疑惑可以回复我~ 2021-07-14 02:24:55
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

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

帮助反馈 APP下载

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

公众号

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