最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中l(wèi)ock和tryLock及l(fā)ockInterruptibly的區(qū)別

 更新時間:2022年05月08日 14:12:47   作者:??Java中文社群????  
這篇文章主要介紹了Java中l(wèi)ock和tryLock及l(fā)ockInterruptibly的區(qū)別,文章介紹詳細,具有一定的參考價值,需要的小伙伴可以參考一下

在 Lock 接口中,獲取鎖的方法有 4 個:lock()、tryLock()、tryLock(long,TimeUnit)、lockInterruptibly(),為什么需要這么多方法?這些方法都有什么區(qū)別?接下來我們一起來看。 

1.lock 方法

lock 方法是 Lock 接口中最基礎的獲取鎖的方法,當有可用鎖時會直接得到鎖并立即返回,當沒有可用鎖時會一直等待,直到獲取到鎖為止,它的基礎用法如下:

Lock?lock?=?new ReentrantLock();
// 獲取鎖
lock.lock();
try {
????// 執(zhí)行業(yè)務代碼...
} finally {
    //釋放鎖
????lock.unlock();
}

2.lockInterruptibly 方法

lockInterruptibly 方法和 lock 方法類似,**當有可用鎖時會直接得到鎖并立即返回,如果沒有可用鎖會一直等待直到獲取鎖,但和 lock 方法不同,lockInterruptibly 方法在等待獲取時,如果遇到線程中斷會放棄獲取鎖。**它的基礎用法如下:

Lock lock = new ReentrantLock();
try {
    // 獲取鎖
    lock.lockInterruptibly();
    try {
        // 執(zhí)行業(yè)務方法...
    } finally {
        // 釋放鎖
        lock.unlock();
    }
} catch (InterruptedException e) {
    e.printStackTrace();
}

PS:使用 thread.interrupt() 方法可以中斷線程執(zhí)行。

3.tryLock 方法

與前面的兩個方法不同,使用無參的 tryLock 方法會嘗試獲取鎖,并立即返回獲取鎖的結果(true 或 false),如果有可用鎖返回 true,并得到此鎖,如果沒有可用鎖會立即返回 false。它的基礎用法如下:

Lock lock = new ReentrantLock();
// 獲取鎖
boolean result = lock.tryLock();
if (result) {
    try {
        // 獲取鎖成功,執(zhí)行業(yè)務代碼...
    } finally {
        // 釋放鎖
        lock.unlock();
    }
} else {
    // 執(zhí)行獲取鎖失敗的業(yè)務代碼...
}

4.tryLock(long,TimeUnit) 方法

**有參數(shù)的 tryLock(long,TimeUnit) 方法需要設置兩個參數(shù),第一個參數(shù)是 long 類型的超時時間,第二個參數(shù)是對參數(shù)一的時間類型描述(比如第一參數(shù)是 3,那么它究竟是 3 秒還是 3 分鐘,是第二個參數(shù)說了算的)。在這段時間內(nèi)如果獲取到可用的鎖了就返回 true,如果在定義的時間內(nèi),沒有得到鎖就會返回 false。**它的基礎用法如下:

Lock lock = new ReentrantLock();
try {
    // 獲取鎖(最多等待 3s,如果獲取不到鎖就返回 false)
    boolean result = lock.tryLock(3, TimeUnit.SECONDS);
    if (result) {
        try {
            // 獲取鎖成功,執(zhí)行業(yè)務代碼...
        } finally {
            // 釋放鎖
            lock.unlock();
        }
    } else {
        // 執(zhí)行獲取鎖失敗的業(yè)務代碼...
    }
} catch (InterruptedException e) {
    e.printStackTrace();
}

5.總結

lock()、tryLock()、tryLock(long,TimeUnit)、lockInterruptibly() 都是用來獲取鎖的,其中 lock 方法如果獲取不到鎖會一直阻塞等待;而 lockInterruptibly 方法雖然也會阻塞等待獲取鎖,但它卻能中途響應線程的中斷;無參的 tryLock 方法會立馬返回一個獲取鎖成功與失敗的結果,有參數(shù)的 tryLock(long,TimeUnit) 方法會在設定的時間內(nèi)返回一個獲取鎖成功與失敗的結果。這 4 個方法的特性各不相同,需要根據(jù)實際的業(yè)務情況選擇合適獲取鎖的方法。

到此這篇關于Java中l(wèi)ock和tryLock及l(fā)ockInterruptibly的區(qū)別的文章就介紹到這了,更多相關Java lock內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • JAVA項目如何打包部署到Linux服務器上

    JAVA項目如何打包部署到Linux服務器上

    本文詳細介紹了在服務器上部署環(huán)境包括JDK、MySQL、Tomcat的設置,以及使用Idea-Maven-SpringBoot進行jar包打包部署的流程,內(nèi)容涵蓋了MySQL配置注意事項、pom.xml配置、打包命令等關鍵步驟,同時,也提供了如何將jar包上傳到Linux服務器并運行的具體方法
    2024-10-10
  • MyBatis?insert實體如何返回主鍵

    MyBatis?insert實體如何返回主鍵

    這篇文章主要介紹了MyBatis?insert實體如何返回主鍵,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java——多線程基礎

    java——多線程基礎

    Java多線程實現(xiàn)方式有兩種,第一種是繼承Thread類,第二種是實現(xiàn)Runnable接口,兩種有很多差異,下面跟著本文一起學習吧,希望能給你帶來幫助
    2021-07-07
  • 關于Spring多數(shù)據(jù)源TransactionManager沖突的解決方案

    關于Spring多數(shù)據(jù)源TransactionManager沖突的解決方案

    這篇文章主要介紹了關于Spring多數(shù)據(jù)源TransactionManager沖突的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 深入了解JAVA 虛引用

    深入了解JAVA 虛引用

    這篇文章主要介紹了JAVA 虛引用的相關資料,幫助大家更好的理解和學習JAVA,感興趣的朋友可以了解下
    2020-08-08
  • maven實現(xiàn)jar包導入+導出方式

    maven實現(xiàn)jar包導入+導出方式

    這篇文章主要介紹了maven實現(xiàn)jar包導入+導出方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • java打印指定年月的日歷

    java打印指定年月的日歷

    這篇文章主要為大家詳細介紹了Java如何打印指定年月的日歷,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • 關于jackson序列化和feign返回值的問題

    關于jackson序列化和feign返回值的問題

    這篇文章主要介紹了關于jackson序列化和feign返回值的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 詳解Spring中使用@within與@target的區(qū)別

    詳解Spring中使用@within與@target的區(qū)別

    這篇文章主要介紹了Spring中使用@within與@target的一些區(qū)別,本文通過項目案例給大家詳細分析,給大家介紹的非常詳細,代碼簡單易懂,需要的朋友可以參考下
    2021-09-09
  • Spring發(fā)送郵件如何內(nèi)嵌圖片增加附件

    Spring發(fā)送郵件如何內(nèi)嵌圖片增加附件

    這篇文章主要介紹了Spring發(fā)送郵件如何內(nèi)嵌圖片增加附件,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10

最新評論

柯坪县| 富锦市| 肇庆市| 萝北县| 丽水市| 蛟河市| 改则县| 肇庆市| 麟游县| 抚松县| 尼勒克县| 利津县| 尼勒克县| 兴隆县| 涿州市| 夏河县| 嘉义县| 丽水市| 兰考县| 博白县| 永兴县| 滕州市| 伊金霍洛旗| 安阳市| 新乡县| 赤峰市| 那曲县| 长沙市| 垣曲县| 宝鸡市| 徐州市| 来宾市| 安溪县| 山阴县| 全州县| 镶黄旗| 章丘市| 耿马| 正阳县| 墨竹工卡县| 延边|