憑借對Condition接口的理解,拿到25K的offer!
點(diǎn)擊上方“JavaEdge”,關(guān)注公眾號
這天,我還在安詳?shù)目磿鴮W(xué)習(xí),面試官的電話突然找我,問到:你懂 Condition 接口嘛?不懂今天就結(jié)束了哦。

聽到是個妹紙聲音來了,我立馬也精神了起來,說到:

Condition實(shí)現(xiàn)了管程里面的條件變量。Java 內(nèi)置的管程只有一個條件變量,而Lock和Condition二人組實(shí)現(xiàn)的管程支持多個條件變量。
因?yàn)檫@樣可以使得代碼可讀性更好,實(shí)現(xiàn)也更容易。

實(shí)現(xiàn)一個阻塞隊(duì)列,就需要兩個條件變量。
可愛的面試官又真誠發(fā)問到:那如何利用兩個條件變量實(shí)現(xiàn)一個阻塞隊(duì)列呢?
一個阻塞隊(duì)列,至少有兩個條件變量:
隊(duì)列不空
因?yàn)榭贞?duì)列沒有元素,所以不可以做出隊(duì)操作
隊(duì)列不滿
因?yàn)殛?duì)列如果已滿,則不可再做入隊(duì)操作

Lock和Condition實(shí)現(xiàn)的管程,線程的等待和通知需要調(diào)用await()、signal()/signalAll(),它們的語義和wait()、notify()/notifyAll()相同。
Lock&Condition實(shí)現(xiàn)的管程
只能使用await()、signal()/signalAll()
synchronized實(shí)現(xiàn)的管程
才能使用wait()、notify()/notifyAll()
如果在Lock&Condition實(shí)現(xiàn)的管程里調(diào)用wait()、notify()/notifyAll(),你距離離職就會更近一步。

往期推薦

目前交流群已有 800+人,旨在促進(jìn)技術(shù)交流,可關(guān)注公眾號添加筆者微信邀請進(jìn)群
喜歡文章,點(diǎn)個“在看、點(diǎn)贊、分享”素質(zhì)三連支持一下~
