reentrantlock,是乙個可重入且獨佔式的鎖,是一種遞迴無阻塞的同步鎖。
和synchronized關鍵字相比,它更靈活、更強大,增加了輪詢、超時、中斷等高階功能。
步驟1:reentrantlock的遞迴實現
步驟2:加個測試類public
class
reentrantlockdemo
次--------"
,n);
if(n<=2)
catch
(interruptedexception e)
this
.dosomething
(++n);}
else
}finally
}}
(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.共享目標檔案 編譯器和彙編器生成可重定位目標檔案 共享目標檔案,聯結器生成可執行目標檔案。在這裡我們首先介紹可重定位目標檔案。可重定位目標檔案 包含二進位制 和資料,可以在編譯時與其他可重定位目標檔案合併起來,建立乙個可執行目標檔案。...