凭借对Condition接口的理解,拿到25K的offer!
点击上方“JavaEdge”,关注公众号
这天,我还在安详的看书学习,面试官的电话突然找我,问到:你懂 Condition 接口嘛?不懂今天就结束了哦。
听到是个妹纸声音来了,我立马也精神了起来,说到:
Condition实现了管程里面的条件变量。Java 内置的管程只有一个条件变量,而Lock和Condition二人组实现的管程支持多个条件变量。
因为这样可以使得代码可读性更好,实现也更容易。
实现一个阻塞队列,就需要两个条件变量。
可爱的面试官又真诚发问到:那如何利用两个条件变量实现一个阻塞队列呢?
一个阻塞队列,至少有两个条件变量:
队列不空
因为空队列没有元素,所以不可以做出队操作
队列不满
因为队列如果已满,则不可再做入队操作
Lock和Condition实现的管程,线程的等待和通知需要调用await()、signal()/signalAll(),它们的语义和wait()、notify()/notifyAll()相同。
Lock&Condition实现的管程
只能使用await()、signal()/signalAll()
synchronized实现的管程
才能使用wait()、notify()/notifyAll()
如果在Lock&Condition实现的管程里调用wait()、notify()/notifyAll(),你距离离职就会更近一步。
往期推荐
目前交流群已有 800+人,旨在促进技术交流,可关注公众号添加笔者微信邀请进群
喜欢文章,点个“在看、点赞、分享”素质三连支持一下~
评论