Java并發(fā)編程中的ReentrantLock詳解
Java ReentrantLock
從Java 5 開(kāi)始,引入了一個(gè)高級(jí)的處理并發(fā)的java.util.concurrent包,它提供了大量更高級(jí)的并發(fā)功能,能大大簡(jiǎn)化多線(xiàn)程程序的編寫(xiě)。
我們知道Java語(yǔ)言直接提供了synchronized關(guān)鍵字用于加鎖,但是這種鎖一是很重,二是獲取時(shí)必須一直等待,沒(méi)有額外的嘗試機(jī)制。
java.util.concurrent.locks包提供了ReentrantLock用于替換synchronized加鎖,我們來(lái)看一下傳統(tǒng)的synchronized代碼:
public class Counter{
private int count;
public void add(int n){
synchronized(this){
count += n;
}
}
}
如果用ReentrantLock替代,可以把代碼改造為:
public class Counter{
private final Lock lock = new ReentrantLock();
private int count;
public void add(int n){
lock.lock();
try{
count += n;
}finally{
lock.unlock();
}
}
}
因?yàn)閟ynchronized是Java語(yǔ)言層面提供的語(yǔ)法,所以我們不需要考慮異常,而ReentrantLock是可重入鎖,它和synchronized一樣,一個(gè)線(xiàn)程可以多吃獲取同一個(gè)鎖。
和synchronized不同的是,ReentrantLock可以嘗試獲取鎖:
if(lock.tryLock(1,TimeUnit.SECONDS)){
try{
...
}finally{
lock.unlock();
}
}
上述代碼在嘗試獲取鎖的時(shí)候,最多等待1秒
后仍未獲取到鎖,tryLock()返回false,程序就可以做一些額外處理的,而不是無(wú)限等待下去。
所以,使用ReentranLock比直接使用synchronized更安全,線(xiàn)程在tryLock()失敗的時(shí)候不會(huì)導(dǎo)致死鎖。
到此這篇關(guān)于Java并發(fā)編程中的ReentrantLock詳解的文章就介紹到這了,更多相關(guān)ReentrantLock詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java多線(xiàn)程并發(fā)JUC包ReentrantLock顯示鎖的用法
- Java使用ReentrantLock進(jìn)行加解鎖的示例代碼
- Java中的Lock與ReentrantLock深入解析
- Java中的ReentrantLock實(shí)現(xiàn)原理及代碼演示
- Java可重入鎖reentrantLock解析
- Java并發(fā)編程之ReentrantLock解析
- Java并發(fā)編程中的ReentrantLock類(lèi)詳解
- Java中的ReentrantLock原理解析
- 淺談一下Java中的ReentrantLock
- Java ReentrantLock的使用與應(yīng)用實(shí)戰(zhàn)
相關(guān)文章
Java常見(jiàn)數(shù)據(jù)結(jié)構(gòu)面試題(帶答案)
這篇文章主要介紹了Java常見(jiàn)數(shù)據(jù)結(jié)構(gòu)面試題,帶有答案及解釋?zhuān)M麑?duì)廣大的程序愛(ài)好者有所幫助,同時(shí)祝大家有一個(gè)好成績(jī),需要的朋友可以參考下。2017-09-09
Opencv實(shí)現(xiàn)身份證OCR識(shí)別的示例詳解
這篇文章主要為大家詳細(xì)介紹了如何使用Opencv實(shí)現(xiàn)身份證OCR識(shí)別功能,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編一起了解一下2024-03-03
Spring Boot REST國(guó)際化的實(shí)現(xiàn)代碼
本文我們將討論如何在現(xiàn)有的Spring Boot項(xiàng)目中添加國(guó)際化。只需幾個(gè)簡(jiǎn)單的步驟即可實(shí)現(xiàn)Spring Boot應(yīng)用的國(guó)際化,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-10-10
FastJson時(shí)間格式化問(wèn)題避坑經(jīng)驗(yàn)分享
這篇文章主要為大家介紹了FastJson時(shí)間格式化問(wèn)題避坑經(jīng)驗(yàn)分享,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
Spring的三級(jí)緩存解決循環(huán)依賴(lài)問(wèn)題
這篇文章主要介紹了Spring的三級(jí)緩存解決循環(huán)依賴(lài)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-06-06

