成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試突擊:Lock、TryLock、LockInterruptibly有什么區別?

開發 前端
4 個方法的特性各不相同,需要根據實際的業務情況選擇合適獲取鎖的方法。

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

lock 方法

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

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

lockInterruptibly 方法

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

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

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

tryLock 方法

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

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

tryLock(long,TimeUnit) 方法

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

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

總結

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

責任編輯:武曉燕 來源: Java面試真題解析
相關推薦

2022-08-22 07:06:32

MyBatisSQL占位符

2022-02-08 07:02:32

進程線程操作系統

2022-08-15 07:06:50

Propertiesyml配置

2022-08-03 07:04:56

GETHTTPPOST

2022-04-24 07:59:53

synchronizJVMAPI

2022-08-10 07:06:57

IoCDISpring

2023-03-26 21:51:42

2022-05-09 07:37:04

Java非公平鎖公平鎖

2022-10-09 20:52:19

事務隔離級別傳播機制

2022-03-16 07:33:40

守護線程用戶線程語言

2022-08-29 07:05:02

JSRJava語言

2024-02-26 07:36:09

lockJava語言

2022-01-11 06:53:23

面試重寫重載

2022-07-18 07:11:35

請求轉發請求重定數據共享

2022-05-05 07:38:32

volatilJava并發

2022-06-13 07:36:06

MySQLInnoDB索引

2023-02-17 08:02:45

@Autowired@Resource

2023-02-01 07:15:16

2023-02-17 08:10:24

2021-12-10 12:01:37

finalfinallyfinalize
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久久久久久久久高潮一区二区 | 久久国产视频一区 | 成年人免费网站 | 热久久999| 精品欧美视频 | 日韩一区二区三区在线看 | 亚洲国产一区在线 | 久久人人国产 | 亚洲 精品 综合 精品 自拍 | 久久免费视频网 | 免费一区二区三区 | 亚洲一区二区三区视频 | 免费一区 | 欧美精品1区 | 亚洲一区国产精品 | 国产一区二区三区久久久久久久久 | 日韩一二区在线 | 中文字幕在线观看视频网站 | 91麻豆蜜桃一区二区三区 | 久久久久国产精品一区三寸 | 久久亚洲精品久久国产一区二区 | 欧美精品乱码久久久久久按摩 | 免费a网 | 午夜小视频免费观看 | 视频在线一区二区 | 久久国产欧美日韩精品 | 欧美一区二区免费在线 | 特级毛片爽www免费版 | 精品久久久久香蕉网 | 国产精品18久久久久久久 | 国产精品不卡视频 | 日韩成人精品视频 | 欧美精品一区二区三区在线播放 | 久久久.com| 欧美日韩一区精品 | 国产精品久久久久久久岛一牛影视 | 中文天堂在线一区 | 人人澡人人射 | 久草热在线 | 成人亚洲精品 | 黄色网页在线观看 |