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机制有点像,其实还是我讲的链表实现的队列。

0
2
求老仙
回复
hellocp7
AQS的重要程度会 > Monitor。 还有它们共性的原理需要掌握。
2021-07-14
共2条回复

笑傲Java面试 剖析大厂高频面试真题 秒变offer收割机

深度剖析大厂面试高频真题,让你秒变offer收割机

1783 学习 · 314 问题

查看课程