老师你好,我想先跟你说一下我看完前几节的理解
就是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的东西,他会把生产者的线程都放进去?