Lock的await和signal是如何工作的?
来源:4-8 如果被问偏向锁、轻量级锁、重量级锁

hellocp7
2021-04-23
老师你好,我想先跟你说一下我看完前几节的理解
就是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的东西,他会把生产者的线程都放进去?
写回答
1回答
-
求老仙
2021-04-27
aqs体系也实现了信号,条件等等。具体来说,和monitor机制有点像,其实还是我讲的链表实现的队列。
022021-07-14
相似问题