这天,我还在安详的看书学习,面试官的电话突然找我,问到:你懂 Condition 接口嘛?不懂今天就结束了哦。
听到是个妹纸声音来了,我立马也精神了起来,说到:
Condition实现了管程里面的条件变量。Java 内置的管程只有一个条件变量,而Lock和Condition二人组实现的管程支持多个条件变量。
因为这样可以使得代码可读性更好,实现也更容易。
实现一个阻塞队列,就需要两个条件变量。
可爱的面试官又真诚发问到:那如何利用两个条件变量实现一个阻塞队列呢?
一个阻塞队列,至少有两个条件变量:
Lock和Condition实现的管程,线程的等待和通知需要调用await()、signal()/signalAll(),它们的语义和wait()、notify()/notifyAll()相同。
如果在Lock&Condition实现的管程里调用wait()、notify()/notifyAll(),你距离离职就会更近一步。