詳談Lock與synchronized 的區(qū)別
1、lock是可中斷鎖,而synchronized 不是可中斷鎖
線程A和B都要獲取對(duì)象O的鎖定,假設(shè)A獲取了對(duì)象O鎖,B將等待A釋放對(duì)O的鎖定,
如果使用 synchronized ,如果A不釋放,B將一直等下去,不能被中斷
如果 使用ReentrantLock,如果A不釋放,可以使B在等待了足夠長(zhǎng)的時(shí)間以后,中斷等待,而干別的事情
ReentrantLock獲取鎖定與三種方式:
a) lock(),如果獲取了鎖立即返回,如果別的線程持有鎖,當(dāng)前線程則一直處于休眠狀態(tài),直到獲取鎖
b) tryLock(),如果獲取了鎖立即返回true,如果別的線程正持有鎖,立即返回false;
c) tryLock(long timeout,TimeUnit unit),如果獲取了鎖定立即返回true,如果別的線程正持有鎖,會(huì)等待參數(shù)給定的時(shí)間,在等待的過程中,如果獲取了鎖定,就返回true,如果等待超時(shí),返回false;
d) lockInterruptibly:如果獲取了鎖定立即返回,如果沒有獲取鎖定,當(dāng)前線程處于休眠狀態(tài),直到或者鎖定,或者當(dāng)前線程被別的線程中斷
2、synchronized是在JVM層面上實(shí)現(xiàn)的,lock是通過代碼實(shí)現(xiàn)的,JVM會(huì)自動(dòng)釋放鎖定(代碼執(zhí)行完成或者出現(xiàn)異常),但是使用Lock則不行,要保證鎖定一定會(huì)被釋放,就必須將unLock()放到finally{}中。
3、在資源競(jìng)爭(zhēng)不是很激烈的情況下,Synchronized的性能要優(yōu)于ReetrantLock,但是在資源競(jìng)爭(zhēng)很激烈的情況下,Synchronized的性能會(huì)下降幾十倍,但是ReetrantLock的性能能維持常態(tài);
以上這篇詳談Lock與synchronized 的區(qū)別就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- 深入Synchronized和java.util.concurrent.locks.Lock的區(qū)別詳解
- Java編程synchronized與lock的區(qū)別【推薦】
- 簡(jiǎn)單了解synchronized和lock的區(qū)別
- 淺談Synchronized和Lock的區(qū)別
- 通過實(shí)例解析synchronized和lock區(qū)別
- Java 多線程Synchronized和Lock的區(qū)別
- 淺談Java中Lock和Synchronized的區(qū)別
- Java常用鎖synchronized和ReentrantLock的區(qū)別
- synchronized?和?Lock?的異同點(diǎn)(如何讓選擇)
相關(guān)文章
java ThreadPoolExecutor線程池拒絕策略避坑
這篇文章主要為大家介紹了java ThreadPoolExecutor拒絕策略避坑踩坑示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
WebSocket實(shí)現(xiàn)數(shù)據(jù)庫(kù)更新時(shí)前端頁(yè)面刷新
這篇文章主要為大家詳細(xì)介紹了WebSocket實(shí)現(xiàn)數(shù)據(jù)庫(kù)更新時(shí)前端頁(yè)面刷新,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04
Spring?Lifecycle?和?SmartLifecycle區(qū)別面試精講
這篇文章主要為大家介紹了Spring?Lifecycle和SmartLifecycle的區(qū)別面試精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
SpringBoot+Mybatis plus實(shí)現(xiàn)多數(shù)據(jù)源整合的實(shí)踐
本文主要介紹了SpringBoot+Mybatis plus實(shí)現(xiàn)多數(shù)據(jù)源整合的實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10
SpringCloud與Dubbo集成Nacos時(shí)服務(wù)重復(fù)注冊(cè)問題的分析與解決
Nacos作為阿里巴巴開源的服務(wù)注冊(cè)與發(fā)現(xiàn)工具,廣泛應(yīng)用于Spring Cloud和Dubbo等微服務(wù)框架中,然而,在實(shí)際開發(fā)中,我們可能會(huì)遇到服務(wù)重復(fù)注冊(cè)的問題,下面我們就來詳細(xì)分析一下這一問題2025-03-03

