勵志

勵志人生知識庫

reentrantlock原理

ReentrantLock的原理主要基於AbstractQueuedSynchronizerAQS)框架,它是一個可重入的排他鎖,支持公平鎖和非公平鎖兩種模式。

在ReentrantLock中,鎖的狀態通過一個volatile修飾的int類型的state變數來表示,其值可以是0(表示無執行緒占用鎖)或者大於0的整數(表示有執行緒占用鎖,且占用次數遞增)。當有執行緒嘗試獲取鎖時,會通過CAS(compare and swap)機制嘗試將state的值從0修改為1,並將當前執行緒設定為擁有鎖的exclusiveOwnerThread。如果修改成功,則表示執行緒獲取到了鎖;如果修改失敗,則表示有其他執行緒競爭鎖,此時執行緒會進入同步佇列等待。

當鎖被釋放時,會從等待佇列中喚醒下一個等待的執行緒,讓其嘗試獲取鎖。ReentrantLock的實現原理還包括volatile變數、CAS設定值、兩個佇列(同步佇列和等待佇列)以及AQS的阻塞和喚醒機制。

ReentrantLock的默認實現是非公平鎖,這意味著獲取鎖的執行緒可能會在佇列中等待,而非總是能夠立即獲取鎖。如果需要公平鎖,可以通過構造函式顯式指定。