ReentrantLock可重入鎖

2021-10-07 09:23:58 字數 2900 閱讀 3991

reentrantlock,是乙個可重入且獨佔式的鎖,是一種遞迴無阻塞的同步鎖。

和synchronized關鍵字相比,它更靈活、更強大,增加了輪詢、超時、中斷等高階功能。

步驟1:reentrantlock的遞迴實現

public

class

reentrantlockdemo

次--------"

,n);

if(n<=2)

catch

(interruptedexception e)

this

.dosomething

(++n);}

else

}finally

}}

步驟2:加個測試類

(value =

"/lock2"

)public

void

lock2

(string key)

--------"

,key)

;this

.reentrantlockdemo.

dosomething(1

);log.

info

("--------請求{}結束--------"

,key);}

步驟3:體驗測試

2020-03-08 11:19:40.974  info 75915 --- [nio-9090-exec-9] c.a.r.controller.reentrantcontroller     : -------請求1--------

2020-03-08 11:19:40.974 info 75915 --- [nio-9090-exec-9] c.a.redis.reentrant.reentrantlockdemo : --------遞迴1次--------

2020-03-08 11:19:42.655 info 75915 --- [io-9090-exec-10] c.a.r.controller.reentrantcontroller : -------請求2--------

2020-03-08 11:19:42.978 info 75915 --- [nio-9090-exec-9] c.a.redis.reentrant.reentrantlockdemo : --------遞迴2次--------

2020-03-08 11:19:44.403 info 75915 --- [nio-9090-exec-1] c.a.r.controller.reentrantcontroller : -------請求3--------

2020-03-08 11:19:44.980 info 75915 --- [nio-9090-exec-9] c.a.redis.reentrant.reentrantlockdemo : --------遞迴3次--------

2020-03-08 11:19:44.980 info 75915 --- [nio-9090-exec-9] c.a.r.controller.reentrantcontroller : --------請求1結束--------

2020-03-08 11:19:44.981 info 75915 --- [io-9090-exec-10] c.a.redis.reentrant.reentrantlockdemo : --------遞迴1次--------

2020-03-08 11:19:46.983 info 75915 --- [io-9090-exec-10] c.a.redis.reentrant.reentrantlockdemo : --------遞迴2次--------

2020-03-08 11:19:48.987 info 75915 --- [io-9090-exec-10] c.a.redis.reentrant.reentrantlockdemo : --------遞迴3次--------

2020-03-08 11:19:48.987 info 75915 --- [nio-9090-exec-1] c.a.redis.reentrant.reentrantlockdemo : --------遞迴1次--------

2020-03-08 11:19:48.987 info 75915 --- [io-9090-exec-10] c.a.r.controller.reentrantcontroller : --------請求2結束--------

2020-03-08 11:19:50.990 info 75915 --- [nio-9090-exec-1] c.a.redis.reentrant.reentrantlockdemo : --------遞迴2次--------

2020-03-08 11:19:52.993 info 75915 --- [nio-9090-exec-1] c.a.redis.reentrant.reentrantlockdemo : --------遞迴3次--------

2020-03-08 11:19:52.994 info 75915 --- [nio-9090-exec-1] c.a.r.controller.reentrantcontroller : --------請求3結束--------

通過測試結果:

1.傳送了3次請求,springboot啟用了3條執行緒來處理,分別是nio-9090-exec-9 io-9090-exec-10 nio-9090-exec-1

2.nio-9090-exec-9執行緒,在dosomething方法遞迴了3次,即證明了reentrantlock是可重入鎖

3.只有當nio-9090-exec-9執行緒執行完後,才能執行io-9090-exec-10 nio-9090-exec-1,為什麼?

因為執行緒之間的請求都被鎖住了,也證明了reentrantlock在不同的執行緒之間是不可重入的。

可重入鎖reentrantLock

reentrantlock可重入獨佔鎖 獨佔 就是在同一時刻只能有乙個執行緒獲取到鎖,而其它獲取鎖的執行緒只能處於同步佇列中等待,只有獲取鎖的執行緒釋放了鎖,後繼的執行緒才能夠獲取鎖。可重入 就是支援重進入的鎖,它表示該鎖能夠支援乙個執行緒對資源的重複加鎖。a.公平鎖和非公平鎖 當b執行緒請求鎖,發...

ReentrantLock可重入鎖的原理及使用場景

從使用場景的角度出發來介紹對reentrantlock的使用,相對來說容易理解一些。a 忽略重複加鎖。b 用在介面互動時點選執行較長時間請求操作時,防止多次點選導致後台重複執行 忽略重複觸發 以上兩種情況多用於進行非重要任務防止重複執行,如 清除無用臨時檔案,檢查某些資源的可用性,資料備份操作等 i...

可重定位目標檔案

目標檔案有三種形式 1.可重定位目標檔案 2.可執行目標檔案 3.共享目標檔案 編譯器和彙編器生成可重定位目標檔案 共享目標檔案,聯結器生成可執行目標檔案。在這裡我們首先介紹可重定位目標檔案。可重定位目標檔案 包含二進位制 和資料,可以在編譯時與其他可重定位目標檔案合併起來,建立乙個可執行目標檔案。...