1. 程式人生 > >自己實戰整理面試題--鎖(帶答案,不斷更新)

自己實戰整理面試題--鎖(帶答案,不斷更新)

java有哪些鎖?

Synchronized 和 ReentrantLock?

1、synchronized是重量級鎖? 從JDK 1.5 到 JDK 1.6 有一個高效併發方面的重要改進,HotSpot虛擬機器開發團隊在這個版本中花費了很大的精力去對Java中的鎖進行優化(synchronized),如適應性自旋、鎖消除、鎖粗化、輕量級鎖和偏向鎖等。這些技術都是為了線上程之間更高效的共享資料,以及解決競爭問題。 在使用synchronized的時候,會有一個順序,這個順序叫做膨脹。會首先使用偏向鎖嘗試、然後使用輕量級鎖、最後才會嘗試重量級鎖。

2、concurrent包為啥不被稱之為重量級鎖 concurrent包底層確實如你所說,依賴LockSupport 提供park()和unpark()方法實現的。 但是,這並不是說只要使用concurrent包中的類,那麼就會直接使用park()和unpark()。上面還有一層重要的東西,那就是CAS。

3、 所以結論是。

synchronized和concurrent包,在底層和作業系統互動時,都是使用mutex lock的。但是,二者都會嘗試各種鎖優化來儘量避免走到這最後一步。 synchronized使用的是如鎖膨脹等技術。 concurrent包則使用的是CAS技術。 在早期,synchronized沒做優化的時候,我們稱之為重量級鎖。後面有了優化手段之後,我們還是沿用老的叫法,最終會膨脹成重量級鎖。 而在concurrent包剛出來的時候,就採用了CAS等技術做了優化,所以,和那時候的synchronized相比,他就沒有被稱之為重量級鎖了。

Synchronized 和 ReentrantLock 鎖機制,怎麼判斷重入鎖的,會不會是死鎖?

死鎖
分散式鎖
公平鎖和非公平鎖
Java 讀寫鎖
讀寫鎖設計主要解決什麼問題?
(Java後端技術公眾號)
說說執行緒安全問題,什麼是執行緒安全,如何保證執行緒安全
重入鎖的概念,重入鎖為什麼可以防止死鎖
產生死鎖的四個條件(互斥、請求與保持、不剝奪、迴圈等待)
如何檢查死鎖(通過jConsole檢查死鎖)
volatile 實現原理(禁止指令重排、重新整理記憶體)
synchronized 實現原理(物件監視器)
synchronized 與 lock 的區別
AQS同步佇列
CAS無鎖的概念、樂觀鎖和悲觀鎖

http://www.cnblogs.com/qjjazry/p/6581568.html

什麼是ABA問題,出現ABA問題JDK是如何解決的

http://cmsblogs.com/?p=2235
常見的原子操作類
樂觀鎖的業務場景及實現方式
Java 8並法包下常見的併發類
偏向鎖、輕量級鎖、重量級鎖、自旋鎖的概念
可參考:《Java多執行緒程式設計核心技術》
nginx的請求轉發演算法,如何配置根據權重轉發
static加鎖
可重入的讀寫鎖,可重入是如何實現的?
synchronized加在方法上用的什麼鎖
可重入鎖中的lock和trylock的區別