Java多線(xiàn)程之多種鎖和阻塞隊(duì)列
一、悲觀(guān)鎖和樂(lè)觀(guān)鎖
1.1. 樂(lè)觀(guān)鎖
顧名思義,就是很樂(lè)觀(guān),每次去拿數(shù)據(jù)的時(shí)候都認(rèn)為別人不會(huì)修改,所以不會(huì)上鎖,但是在更新的時(shí)候會(huì)判斷一下在此期間別人有沒(méi)有去更新這個(gè)數(shù)據(jù),可以使用版本號(hào)等機(jī)制。
樂(lè)觀(guān)鎖適用于多讀的應(yīng)用類(lèi)型,樂(lè)觀(guān)鎖在Java中是通過(guò)使用無(wú)鎖編程來(lái)實(shí)現(xiàn),最常采用的是CAS算法,Java原子類(lèi)中的遞增操作就通過(guò)CAS自旋實(shí)現(xiàn)的。
CAS全稱(chēng) Compare And Swap(比較與交換),是一種無(wú)鎖算法。在不使用鎖(沒(méi)有線(xiàn)程被阻塞)的情況下實(shí)現(xiàn)多線(xiàn)程之間的變量同步。java.util.concurrent包中的原子類(lèi)就是通過(guò)CAS來(lái)實(shí)現(xiàn)了樂(lè)觀(guān)鎖。
1.2. 悲觀(guān)鎖
總是假設(shè)最壞的情況,每次去拿數(shù)據(jù)的時(shí)候都認(rèn)為別人會(huì)修改,所以每次在拿數(shù)據(jù)的時(shí)候都會(huì)上鎖,這樣別人想拿這個(gè)數(shù)據(jù)就會(huì)阻塞直到它拿到鎖。
二、公平鎖和非公平鎖


三、可重入鎖(遞歸鎖)
先看官網(wǎng)的解釋翻譯后的

看不太懂,那么我們結(jié)合一下下面的案例就行了。

兩個(gè)同步方法01和02,都是被鎖住的,當(dāng)我們運(yùn)行01的時(shí)候,一旦獲取的01的鎖,那么02的鎖也可以被自動(dòng)獲取。

補(bǔ)充:lock和unlock只要配對(duì)使用,就不會(huì)有問(wèn)題。
四、自旋鎖

其實(shí)CAS底層就是用 Unsafe類(lèi)+CAS(自旋) 實(shí)現(xiàn)的,CAS底層有一個(gè)do while語(yǔ)句,循環(huán)比較在主存中的值是否等于期望值。
五、獨(dú)占鎖(寫(xiě))/共享鎖(讀)

讀歸讀,寫(xiě)歸寫(xiě),讀和寫(xiě)可以同時(shí)進(jìn)行。
六、什么是阻塞隊(duì)列?
隊(duì)列中放著數(shù)據(jù),一個(gè)線(xiàn)程生產(chǎn),一個(gè)線(xiàn)程獲取。


七、阻塞隊(duì)列(BlockingQueue)

阻塞隊(duì)列有多少實(shí)現(xiàn)類(lèi)呢?

到此這篇關(guān)于Java多線(xiàn)程之多種鎖和阻塞隊(duì)列的文章就介紹到這了,更多相關(guān)java多種鎖和阻塞隊(duì)列內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot整合websocket實(shí)現(xiàn)即時(shí)通信聊天
這篇文章主要介紹了SpringBoot整合websocket實(shí)現(xiàn)即時(shí)通信聊天,實(shí)時(shí)通信是一個(gè)實(shí)時(shí)通信系統(tǒng),允許兩人或多人使用網(wǎng)絡(luò)實(shí)時(shí)的傳遞文字消息、文件、語(yǔ)音與視頻交流,需要的朋友可以參考下2022-05-05
java項(xiàng)目新建遇到的兩個(gè)問(wèn)題解決
創(chuàng)建一個(gè)新的Java項(xiàng)目可以通過(guò)多種方式進(jìn)行,包括使用集成開(kāi)發(fā)環(huán)境(IDE)或手動(dòng)創(chuàng)建,下面這篇文章主要給大家介紹了關(guān)于java項(xiàng)目新建遇到的兩個(gè)問(wèn)題,需要的朋友可以參考下2024-06-06
Java 基于Spire.Cloud.SDK for Java在PDF中繪制形狀
這篇文章主要介紹了Java 基于Spire.Cloud.SDK for Java在PDF中繪制形狀,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
Java concurrency集合之 CopyOnWriteArrayList_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Java concurrency集合之 CopyOnWriteArrayList的相關(guān)資料,需要的朋友可以參考下2017-06-06
Java創(chuàng)建線(xiàn)程及配合使用Lambda方式
這篇文章主要介紹了Java創(chuàng)建線(xiàn)程及配合使用Lambda方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08

