【Java面試】什麼是可重入,什麼是可重入鎖? 它用來解決什麼問題?

跟著Mic學架構 發表於 2022-06-15
Java 面試

一個工作了3年的粉絲,去一個網際網路公司面試,結果被面試官懟了。

面試官說:”這麼簡單的問題你都不知道? 沒法聊了,回去等通知吧“。

這個問題是: ”什麼是可重入鎖,以及它的作用是什麼?“

對於這個問題,來看看普通人和高手的回答吧

普通人:

嗯。。。。。。。。。。。。。。。。。。

高手:

好的。

可重入是多執行緒併發程式設計裡面一個比較重要的概念,

簡單來說,就是在執行的某個函式或者程式碼,因為搶佔資源或者中斷等原因導致函式或者程式碼的執行中斷,

等待中斷程式執行結束後,重新進入到這個函式或者程式碼中執行,並且執行結果不會受到影響,那麼這個函式或者程式碼就是可重入的。

而可重入鎖,簡單來說就是一個執行緒如果搶佔到了互斥鎖資源,在鎖釋放之前再去競爭同一把鎖的時候,不需要等待,只需要記錄重入次數。

在多執行緒併發程式設計裡面,絕大部分鎖都是可重入的,比如Synchronized、ReentrantLock等,但是也有不支援重入的鎖,比如JDK8裡面提供的讀寫鎖StampedLock。

carbon-202204211206002

鎖的可重入性,主要解決的問題是避免執行緒死鎖的問題。

因為一個已經獲得同步鎖X的執行緒,在釋放鎖X之前再去競爭鎖X的時候,相當於會出現自己要等待自己釋放鎖,這很顯然是無法成立的。

以上就是我對這個問題的理解。

總結

關於這個問題,其實是考察求職者的基礎知識。

網際網路大廠對基礎的考察會特別深,有必要的話還是需要在工作之外去多花一點時間研究。

並且,對於3年工作經驗,考察這類問題也不算過分。

如果有任何面試問題、職業發展問題、學習問題,都可以私信我。

file

版權宣告:本部落格所有文章除特別宣告外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Mic帶你學架構
如果本篇文章對您有幫助,還請幫忙點個關注和贊,您的堅持是我不斷創作的動力。歡迎關注同名微信公眾號獲取更多技術乾貨!