偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

我們一起聊聊 Java 中的鎖

開發(fā) 前端
java中synchronized 關(guān)鍵字修飾的鎖為不可中斷鎖,一旦線程申請(qǐng)了鎖,需要等獲取鎖之后執(zhí)行完畢邏輯后,不可以被中斷。

一、偏向鎖,輕量級(jí)鎖,重量級(jí)鎖

這三種鎖特指 synchronized 鎖的狀態(tài),通過java對(duì)象的頭mark world 來標(biāo)識(shí)鎖狀態(tài)。

偏向鎖 有時(shí)候我們加鎖了,但是實(shí)際上卻不存在競爭,所以沒必要上鎖,只要打個(gè)標(biāo)識(shí)即可,這就是偏向鎖的思想。如果一個(gè)對(duì)象初始化后,還沒有任何線程來訪問它,它就是可偏向的,第一個(gè)線程來訪問它的時(shí)候,就把這個(gè)線程記錄下來,如果下次仍然是這個(gè)線程訪問,因?yàn)樗沁@個(gè)偏向鎖的擁有者,所以直接獲取鎖,開銷很小。

輕量級(jí)鎖 如果synchronized 是被java的多個(gè)線程交替訪問,不是同時(shí)競爭的,或者競爭的時(shí)間短,用CAS(Compare And Set)方式來輪詢獲取鎖,不用經(jīng)過上下文切換,這種時(shí)候沒必要用重量級(jí)鎖。

輕量級(jí)鎖指原來是偏向鎖,這時(shí)候一個(gè)非偏向鎖擁有者的線程來訪問對(duì)象,那么這個(gè)偏向鎖就升級(jí)為輕量級(jí)鎖,即通過輪詢方式來獲取鎖,不用阻塞。

重量級(jí)鎖 對(duì)于競爭比較激烈的場景,采用輕量級(jí)鎖就需要等待很長時(shí)間的空轉(zhuǎn),這時(shí)候適合用重量級(jí)鎖。它利用重量級(jí)鎖的同步機(jī)制實(shí)現(xiàn),開銷比較大。

鎖升級(jí)

總結(jié): 偏向鎖性能最好不用CAS操作,輕量級(jí)鎖利用CAS和自旋避免重量級(jí)操作,性能次之;重量級(jí)鎖利用系統(tǒng)實(shí)現(xiàn),需要上下文切換,最終,性能最差。

二、可重入鎖/非可重入鎖

可重入鎖即獲取鎖的線程,不釋放鎖的情況下,可以再次獲取這個(gè)鎖。非可重入鎖即線程獲取鎖之后,只能釋放了鎖之后,才能再次獲取鎖。

ReentrantLock 即可重入鎖。

三、共享鎖、獨(dú)占鎖

共享鎖是可以同時(shí)被多個(gè)線程同時(shí)占有的鎖,獨(dú)占鎖即只能被一個(gè)線程所占有。我們常用的讀寫鎖,讀鎖屬于共享鎖,可以同時(shí)被多個(gè)線程占有,寫鎖屬于獨(dú)占鎖,只能被一個(gè)線程所占用。

四、公平鎖、非公平鎖

如果鎖已經(jīng)被占用,后續(xù)要獲取鎖的線程就會(huì)等待,開始排隊(duì),如果鎖被釋放后,等待時(shí)間最長的線程獲取鎖,這就是公平鎖,非公平鎖會(huì)在一定情況下準(zhǔn)許插隊(duì)的情況。

五、悲觀鎖和樂觀鎖

悲觀鎖即在獲取資源之前,先獲取鎖,然后就進(jìn)行操作,這樣保證其他想操作的線程因?yàn)闆]有獲取鎖,所以無法操作。樂觀鎖,傾向于認(rèn)為競爭不激烈,它不要求操作資源前先獲取鎖,而是直接用CAS操作,即更新的時(shí)候判斷值是不是原來獲取的值,如果是就直接修改(判斷和更改是原子操作),如果不是就重試,在不獨(dú)占的時(shí)候就完成了資源的修改。

六、自旋鎖和非自旋鎖

自旋鎖的理念是如果線程拿不到鎖,不會(huì)阻塞或釋放 CPU 資源而是采用循環(huán)等待的方式,不斷獲取鎖,這種方式即為自旋,我理解即為不停止循環(huán)判斷鎖是否釋放了;非自旋鎖,如果沒有獲取鎖,則會(huì)進(jìn)入阻塞或做其他事情。

七、可中斷鎖和不可中斷鎖

java中synchronized 關(guān)鍵字修飾的鎖為不可中斷鎖,一旦線程申請(qǐng)了鎖,需要等獲取鎖之后執(zhí)行完畢邏輯后,不可以被中斷。 ReentrantLock 即可中斷鎖,在獲取鎖的過程中,可以被中斷,不用必須等待其他線程釋放鎖后,再獲取鎖。

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2025-03-27 02:00:00

SPIJava接口

2022-07-29 08:17:46

Java對(duì)象內(nèi)存

2023-04-26 07:30:00

promptUI非結(jié)構(gòu)化

2021-08-27 07:06:10

IOJava抽象

2024-02-20 21:34:16

循環(huán)GolangGo

2023-08-10 08:28:46

網(wǎng)絡(luò)編程通信

2023-08-04 08:20:56

DockerfileDocker工具

2023-06-30 08:18:51

敏捷開發(fā)模式

2023-09-10 21:42:31

2022-05-24 08:21:16

數(shù)據(jù)安全API

2022-10-08 00:00:05

SQL機(jī)制結(jié)構(gòu)

2023-10-26 08:38:43

SQL排名平分分區(qū)

2023-11-10 08:04:43

Java 17Java 11JDK

2023-03-07 07:05:29

生產(chǎn)數(shù)據(jù)庫運(yùn)維

2021-07-31 11:40:55

Openresty開源

2022-11-12 12:33:38

CSS預(yù)處理器Sass

2022-01-04 12:08:46

設(shè)計(jì)接口

2023-12-28 09:55:08

隊(duì)列數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)

2024-02-26 00:00:00

Go性能工具

2023-07-27 07:46:51

SAFe團(tuán)隊(duì)測試
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)