Redisson 分布式鎖獲取tryLock和lock的區別

問題

boolean isLock = lock.tryLock(10, 30, TimeUnit.SECONDS);
boolean isLock = lock.lock(30, TimeUnit.SECONDS);
boolean isLock = lock.lock();
三者的區別??

這三個方法都是用于獲取 Redisson 分布式鎖的,但它們在獲取鎖的方式和行為上有一些區別。下面是這三種方法的具體區別:

1. lock.tryLock(long waitTime, long leaseTime, TimeUnit unit)

作用:
  • 這個方法嘗試獲取鎖,并且會在指定的時間內(waitTime)等待鎖的釋放。如果在指定時間內能夠獲取到鎖,則會繼續執行,否則會返回 false
  • 獲取到鎖后,鎖會持有指定的時間(leaseTime),即使鎖的持有者沒有主動釋放鎖,鎖也會在超時后自動釋放。leaseTime 是鎖的持有時間,單位是 TimeUnit(比如秒、毫秒等)。
參數:
  • waitTime: 獲取鎖的最大等待時間。如果在這個時間內獲取不到鎖,方法會返回 false
  • leaseTime: 鎖的持有時間,即使持有鎖的線程沒有主動釋放鎖,leaseTime 時間到期后,鎖會自動釋放。
  • unit: 時間單位(秒、毫秒等)。
示例:
boolean isLock = lock.tryLock(10, 30, TimeUnit.SECONDS);
  • 該方法會在最多 10 秒內嘗試獲取鎖,獲取到鎖后,鎖會持有 30 秒。如果 10 秒內沒有獲取到鎖,方法返回 false
使用場景:
  • 如果你只想等待一定的時間去獲取鎖,并且知道如果獲取不到鎖就不繼續執行,那么使用 tryLock
  • 適用于需要“獲取鎖失敗”時不阻塞當前線程的場景。

2. lock.lock(long leaseTime, TimeUnit unit)

作用:
  • 這個方法會阻塞當前線程,直到獲取到鎖為止。與 tryLock 的不同之處在于,它不會限制等待鎖的時間,線程會一直阻塞直到成功獲取到鎖。
  • 獲取到鎖后,鎖會持有指定的時間(leaseTime)。在超時之前,鎖會被自動釋放。
參數:
  • leaseTime: 鎖的持有時間,如果持有鎖的線程沒有主動釋放鎖,leaseTime 時間到期后,鎖會自動釋放。
  • unit: 時間單位(秒、毫秒等)。
示例:
boolean isLock = lock.lock(30, TimeUnit.SECONDS);
  • 該方法會阻塞當前線程,直到獲取到鎖。獲取到鎖后,鎖會持有 30 秒。
使用場景:
  • 如果你希望當前線程獲取鎖后,阻塞并執行業務邏輯,直到鎖的持有時間超時或者線程完成操作。
  • 如果你不關心等待多長時間,只要能夠獲得鎖并執行業務,適合使用此方法。

3. lock.lock()

作用:
  • 這個方法是最簡單的獲取鎖的方式,它會無限期地阻塞直到獲取到鎖為止。獲取到鎖后,線程持有鎖直到顯式調用 unlock() 來釋放鎖。
  • 與前兩者的區別是,它沒有超時設置,鎖會一直被持有直到調用 unlock() 來顯式釋放。
參數:
  • 無參數。
示例:
lock.lock();
  • 該方法會阻塞當前線程,直到獲取到鎖。鎖會一直持有,直到顯式調用 unlock() 釋放鎖。
使用場景:
  • 如果你確定當前線程在獲取鎖后需要一直執行,直到任務完成且沒有超時的考慮,使用該方法是最直接的方式。
  • 適用于鎖的生命周期和當前線程的生命周期一致的場景。

總結對比:

方法是否會阻塞是否有超時鎖的持有時間用途
tryLock(long waitTime, long leaseTime, TimeUnit unit)(如果獲取不到鎖,會等 waitTime有超時waitTimeleaseTime超時后自動釋放鎖用于短時間等待獲取鎖,不獲取鎖則不執行業務
lock(long leaseTime, TimeUnit unit)(一直阻塞直到獲取到鎖)有超時leaseTime超時后自動釋放鎖用于無限期等待獲取鎖,鎖自動釋放
lock()(一直阻塞直到獲取到鎖)無超時鎖持有直到顯式調用 unlock()用于長期持有鎖,直到顯式釋放

推薦場景:

  • tryLock:適用于你希望嘗試獲取鎖但又不想長時間阻塞的場景。如果無法獲取鎖,你可以采取其他措施(比如返回失敗或重試)。
  • lock(long leaseTime, TimeUnit unit):適用于希望獲取鎖后,進行一定時間的操作后自動釋放鎖的場景。
  • lock():適用于你希望線程獲取鎖后一直執行任務,直到任務完成且顯式釋放鎖的場景。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64715.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64715.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64715.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【git】git生成rsa公鑰的方法

git生成rsa公鑰的方法 一,簡介二,操作方法三,總結 一,簡介 在工作的過程中,經常需要生成rsa的密鑰,然后提供給別人,然后別人給你開通代碼下載權限。本文介紹如何在本地生成rsa的密鑰供參考。 …

Zookeeper模式安裝Kafka(含常規、容器兩種安裝方式)

一、#創作靈感# 公司使用Kafka的軟件項目較多,故寫技術筆記鞏固知識要點 二、軟件環境 - Kafka 3.9.0 官方下載地址:Kafka 3.9.0 - ZooKeeper 3.9.3 官方下載地址:ZooKeeper 3.9.3 - Docker Desktop 4.37 容器圖形化工具 官方下載地址…

7.傅里葉級數練習題

7.傅里葉級數練習題 設函數&#xff1a; f ( x ) { ? x , 0 ≤ x ≤ 1 2 , 2 ? 2 x , 1 2 < x < 1 , f(x) \begin{cases} -x, & 0 \leq x \leq \frac{1}{2}, \\ 2 - 2x, & \frac{1}{2} < x < 1, \end{cases} f(x){?x,2?2x,?0≤x≤21?,21?<x&…

【高項】信息系統項目管理師(二)項目管理概論

一、PMBOK的發展 項目管理知識體系&#xff08;PMBOK&#xff09;是由美國項目管理協會&#xff08;PMI&#xff09;開發的一套描述項目管理專業范圍的知識體系&#xff0c;包含了對項目管理所需的知識、技能和工具的描述。 二、項目基本要素 2.1 項目基礎 項目是為提供一項…

C++設計模式:狀態模式(自動售貨機)

什么是狀態模式&#xff1f; 狀態模式是一種行為型設計模式&#xff0c;它允許一個對象在其內部狀態發生改變時&#xff0c;動態改變其行為。通過將狀態相關的邏輯封裝到獨立的類中&#xff0c;狀態模式能夠將狀態管理與行為解耦&#xff0c;從而讓系統更加靈活和可維護。 通…

【Pytorch實用教程】循環神經網絡中使用dropout需要注意的問題

文章目錄 問題解答警告的具體含義解決方案示例代碼總結問題 UserWarning: dropout option adds dropout after all but last recurrent layer, so non-zero dropout expects num_layers greater than 1, but got dropout=0.3 and num_layers=1 warnings.warn("dropout op…

數據中臺與數據治理服務方案[50頁PPT]

本文概述了數據中臺與數據治理服務方案的核心要點。數據中臺作為政務服務數據化的核心&#xff0c;通過整合各部門業務系統數據&#xff0c;進行建模與加工&#xff0c;以新數據驅動政府管理效率提升與政務服務能力增強。數據治理則聚焦于解決整體架構問題&#xff0c;確保數據…

postgresq-自定義執行計劃(custom plan)與generic plan(通用執行計劃)

文章目錄 之前寫過一篇關于 PostgreSQL prepare sql的文章&#xff0c;但當時沒有提到generic plan(通用計劃)和custom plan(自定義計劃)這兩個概念。現在將通過舉例介紹這兩個概念。 創建測試表&#xff1a; postgres# create database demo; CREATE DATABASE postgres# \c d…

dockfile 配置 /etc/apt/source.list.d/debian.list 清華鏡像

docker:3.12.7 鏡像使用的是 debian 系統&#xff0c;比 ubuntu 更輕量。debian 系統內&#xff0c;apt 鏡像源列表位于 /etc/apt/source.list.d/debian.list&#xff08;作為對比&#xff0c;ubuntu 的鏡像列表位于 /etc/apt/source.list&#xff0c;二者語法相同&#xff09;…

程序員測試日常小工具

作為一名程序員&#xff0c;或者測試人員&#xff0c;日常工作最常用的工具有哪些&#xff0c;截圖&#xff0c;截圖漂浮&#xff0c;翻譯&#xff0c;日期處理&#xff0c;api調用...&#xff0c; 當你拿到一串報文后&#xff0c;想要json轉換時&#xff0c;是不是要打…

【MySQL高級】第1-4章

第1章 存儲過程 1.1 什么是存儲過程&#xff1f; 存儲過程可稱為過程化SQL語言&#xff0c;是在普通SQL語句的基礎上增加了編程語言的特點&#xff0c;把數據操作語句(DML)和查詢語句(DQL)組織在過程化代碼中&#xff0c;通過邏輯判斷、循環等操作實現復雜計算的程序語言。 換…

深入淺出:AWT事件監聽器及其應用

前言 在Java的GUI編程中&#xff0c;事件處理是非常重要的一環。AWT&#xff08;Abstract Window Toolkit&#xff09;框架提供了靈活的事件處理機制&#xff0c;使得開發者能夠響應用戶的操作&#xff0c;例如點擊按鈕、鍵盤輸入、鼠標點擊等。AWT的事件監聽器就是實現這一機…

【Rust自學】8.5. HashMap Pt.1:HashMap的定義、創建、合并與訪問

8.5.0. 本章內容 第八章主要講的是Rust中常見的集合。Rust中提供了很多集合類型的數據結構&#xff0c;這些集合可以包含很多值。但是第八章所講的集合與數組和元組有所不同。 第八章中的集合是存儲在堆內存上而非棧內存上的&#xff0c;這也意味著這些集合的數據大小無需在編…

混合合并兩個pdf文件

混合兩個pdf 1、在線免費交替和混合奇數和偶數PDF頁面2、有什么軟件把兩個 PDF 交叉合并&#xff1f;3、pdfsam本地合并 如何Google翻譯的原文和譯文合并&#xff0c;&#xff08;沉浸式翻譯效果相對較好&#xff09; 1、在線免費交替和混合奇數和偶數PDF頁面 https://deftpd…

Hutool 發送 HTTP 請求的幾種常見寫法

最簡單的 GET 請求&#xff1a; String result HttpUtil.get("https://www.baidu.com");帶參數的 GET 請求&#xff1a; // 方法1: 直接拼接URL參數 String result HttpUtil.get("https://www.baidu.com?name張三&age18");// 方法2: 使用 HashMap…

獲取用戶詳細信息-ThreadLocal優化

Thread全局接口可用&#xff0c;不用再重復編寫。所以為了代碼的復用&#xff0c;使用Thread。把之前的內容&#xff08;函數的參數和map與username&#xff09;注釋掉&#xff0c;換為Thread傳過來的內容&#xff08;map與username&#xff09;。 因為Thread需要在攔截器里面…

THUCNews解壓/THUCNews數據集解壓出問題

省流&#xff1a;使用zip64進行解壓&#xff0c;文件數目太多windows默認zip16裝不下 我在使用THUCNews中文文本數據集時出現了問題&#xff0c;原數據集解壓后應該包含以下兩個文件夾: 其中THUCNews文件夾下有以新聞類別命名的子文件。官網下載的是一個1.56GB的zip壓縮包 而我…

MySQL使用通用二進制文件安裝到Unix/Linux

Oracle提供了一組MySQL的二進制發行版。其中包括用于許多平臺的壓縮tar文件&#xff08;擴展名為.tar.xz的文件&#xff09;形式的通用二進制發行版&#xff0c;以及用于選定平臺的特定平臺包格式的二進制文件。 本節介紹在Unix/Linux平臺上從壓縮的tar文件二進制分布安裝MySQ…

安卓/system/bin下命令中文說明(AI)

ATFWD-daemon&#xff1a;AT指令轉發守護進程&#xff0c;用于將AT指令從應用層轉發到調制解調器。 PktRspTest&#xff1a;數據包響應測試工具。 StoreKeybox&#xff1a;存儲密鑰盒工具&#xff0c;用于安全地存儲加密密鑰。 WifiLogger_app&#xff1a;WiFi日志記錄應用&…

Git操作總結

可以直接看實踐 總結自施磊老師課程 Git與SVN對比 svn操作流程 寫代碼。 從服務器拉回服務器的當前版本庫&#xff0c;并解決服務器版本庫與本地代碼的沖突。 將本地代碼提交到服務器。 Git操作流程 寫代碼&#xff0c; 然后添加&#xff08;add&#xff09;到暫存區。 …