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

