【Java面試】通過安檢的例子理解什麼是可重入鎖

相信大家安檢的時候最討厭的就是兩類人,一類是違禁物品非常多又恰巧在你前面、另一類就是插隊的人,而這兩類人恰好解釋了可重入鎖。


看圖理解

現在安檢的準備去安檢的門前有一個大包小包A,老實巴交B,還有一個嚴厲的安檢員S。

可重入鎖1-公平鎖模型
A來得比較早,所以正好排在了最前頭,但是他的東西實在太多了,一個個一個的放進去安檢機。

這時候B看到也來到了安檢門前,但還不到他安檢,因爲前面的大包小包A一會兒被S叫A拿一下揹包裏的水壺,一會兒叫拿一下腰包裏的打火機,一會兒又叫拿錢包裏的蝴蝶刀,違禁物品瘋狂的遞增。
B看這架勢心裏想:“得,可以休息一會兒了。”

可重入鎖2
於是低頭開始玩手機,前面的老哥所有的違禁物品都檢查完了,可以通過了,這時候後面來了一個趁虛而入C。

可重入鎖3-非公平鎖模型
C說:“兄弟,你看我快趕不上火車,您讓我先來成不。”

總結

第一個人A因爲沒有人和他搶,根據公平鎖模型,自然而然的成爲了隊伍的第一個人,後面來的人就只能在線外等待前一個人的檢查。
圖中的待檢查數就是我們目前鎖的數量,前面的人看起來只有一個人,但是他身上有可能有很多是我們看不到的需要被檢查的待檢查物品,類似我們方法內部的實現,我們並知道他內部是否加了鎖,每次被檢查一個新的物品我們的數值就+1,然後一個個檢查通過了,直到最後把所有的鎖都解開了,才能進行下一個人的檢查,也就是這個數值又歸爲0了。
這個時候所有人除了等得不耐煩的B埋頭玩手機,恰好又來了一個C,因爲喚醒B需要一定的時間,根據非公平鎖模型,C正好在這個時候趁虛而入了,搶佔到了這個位置,當然如果這時候B反應夠快,也是有可能搶佔到這個位置的。


參考資料

輕鬆學習java可重入鎖(ReentrantLock)的實現原理


文章中出現的任何錯誤歡迎指正,共同進步!

最後做個小小廣告,有對WEB開發和網絡安全感興趣的,可以加羣一起學習和交流!

交流羣
QQ:425343603

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章