凭借对Condition接口的理解,拿到25K的offer!

共 903字,需浏览 2分钟

 ·

2021-04-30 13:17


  点击上方“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(),你距离离职就会更近一步。

往期推荐


由于不知线程池的bug,某Java程序员叕被祭天

程序员因重复记录日志撑爆ELK被辞退!

拥抱Kubernetes,再见了Spring Cloud

和阿里P8大佬面试互怼了半小时的Fork/Join原理!




目前交流群已有 800+人,旨在促进技术交流,可关注公众号添加笔者微信邀请进群



喜欢文章,点个“在看、点赞、分享”素质三连支持一下~

浏览 15
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报