日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

簡直了,被“Java并發鎖”問題追問到自閉

來源: 責編: 時間:2024-04-02 17:16:30 252觀看
導讀故事地鐵上,小帥雙目空洞地望著窗外...絕望,發自內心地感到絕望...距離失業已經過去兩個月了,這是小帥接到的第四次面試邀請。“回去等通知吧...”,簡簡單單的六個字,把小帥的心再次打入了冰窖。上次“【ThreadLocal問出

故事

地鐵上,小帥雙目空洞地望著窗外...絕望,發自內心地感到絕望...IqP28資訊網——每日最新資訊28at.com

距離失業已經過去兩個月了,這是小帥接到的第四次面試邀請。“回去等通知吧...”,簡簡單單的六個字,把小帥的心再次打入了冰窖。IqP28資訊網——每日最新資訊28at.com

上次“【ThreadLocal問出花】”,小帥其實也有吸取教訓得,這次對于多線程的問題還是做了很多準備的...可是沒想到這次的結果居然也還是這樣。IqP28資訊網——每日最新資訊28at.com

“Java中的鎖了解吧?介紹一下吧”,面試官不緊不慢地問到。IqP28資訊網——每日最新資訊28at.com

“樂觀鎖、悲觀鎖、公平鎖、非公平鎖,然后平時咱們的synchronized是基于.....”小帥把知道的所有關于鎖的基本都回答了一遍。IqP28資訊網——每日最新資訊28at.com

面試官對他笑了笑,“就這些嗎?還有呢?比如自旋鎖、可重入鎖、獨占鎖....并且說一下你的理解,或者聊一下使用場景的優劣吧。”IqP28資訊網——每日最新資訊28at.com

“額.....以前好像看到過...”小帥語無倫次地回答到。IqP28資訊網——每日最新資訊28at.com

“嗯,行吧,之前的那些答得可以的,不過一會我這邊有個會,要不今天咱們就聊到這里?回去等通知吧...”IqP28資訊網——每日最新資訊28at.com

IqP28資訊網——每日最新資訊28at.com

Java中讓人眼花繚亂的鎖你是否真的一一清楚了?

試問這樣一個大而寬的問題,大家能夠總結全嗎,如果讓各位來回答,能否回答完全呢?IqP28資訊網——每日最新資訊28at.com

我們在實際的并發編程中,常常遇到多個線程訪問一個共享變量的情況,當同時對共享變量進行讀寫操作的時候,就會產生數據不一致的情況。為了保證資源獲取的有序性,我們就常常會用到并發鎖。IqP28資訊網——每日最新資訊28at.com

那么接下來咱們就來聊聊這些Java并發鎖的理解吧。我們將從以下這些方面來一起回顧一下Java中的并發鎖。IqP28資訊網——每日最新資訊28at.com

IqP28資訊網——每日最新資訊28at.com

概要IqP28資訊網——每日最新資訊28at.com

樂觀鎖和悲觀鎖:線程是否鎖住同步資源

大家其實對樂觀鎖和悲觀鎖聽說的比較多一些,所以咱們就先來聊聊這兩種類型的鎖。這兩種類型的鎖,本質區分是要看線程是否鎖住同步資源。IqP28資訊網——每日最新資訊28at.com

先來看一下悲觀鎖。悲觀鎖就是每次去拿數據的時候都會認為別人會修改數據,所以在讀取數據的時候都會上鎖。這樣就會導致線程臨時阻塞。IqP28資訊網——每日最新資訊28at.com

IqP28資訊網——每日最新資訊28at.com

悲觀鎖IqP28資訊網——每日最新資訊28at.com

再來看一下樂觀鎖,樂觀鎖就是每次在拿數據的時候都假設別人不會修改數據,所以都不會進行上鎖;只有在更新數據的時候才去判斷之前有沒有別的線程更新了這條數據。如果沒有更新,那么當前線程會自己修改數據并且寫入成功。如果數據已經被其他線程更新了,那么會報錯或者自動重試,例如下圖。IqP28資訊網——每日最新資訊28at.com

IqP28資訊網——每日最新資訊28at.com

樂觀鎖IqP28資訊網——每日最新資訊28at.com

上述兩種鎖,并沒有優劣之分。只是看相關的場景然后分別去使用。IqP28資訊網——每日最新資訊28at.com

  • 樂觀鎖:適用于寫少讀多的場景。因為不用上鎖,釋放鎖,省去了鎖的開銷,從而提升了吞吐量。
  • 悲觀鎖:適用于寫多讀少的場景。因為線程競爭激烈,如果使用樂觀鎖會導致線程不斷進行重試,反而降低吞吐量。

共享鎖和獨占鎖:多個線程是否共享同一把鎖

并發場景下,如果多個線程能夠共享一把鎖,那么就是所謂的共享鎖,如果不能,那么則為獨占鎖(其他命名:排他鎖或者獨享鎖)。IqP28資訊網——每日最新資訊28at.com

共享鎖指鎖可以被多個線程持有。如果一個線程對數據加上共享鎖,那么其他線程只能對數據再加共享鎖,不能加獨占鎖。另外的共享鎖的線程只能讀數據,不能修改數據。如下圖。IqP28資訊網——每日最新資訊28at.com

IqP28資訊網——每日最新資訊28at.com

共享鎖IqP28資訊網——每日最新資訊28at.com

獨占鎖是指鎖一次只能被一個線程持有,如果一個線程對數據加上獨占鎖,那么其他的線程則不能對該數據再加任何類型的鎖。如果一個線程獲取獨占鎖,那么則該線程既可以讀數據又可以修改數據。IqP28資訊網——每日最新資訊28at.com

IqP28資訊網——每日最新資訊28at.com

獨占鎖IqP28資訊網——每日最新資訊28at.com

對于獨占鎖來說,大家比較熟悉的就是synchronized和J.U.C包中的Lock實現類。IqP28資訊網——每日最新資訊28at.com

大家可能也聽說過互斥鎖,其實互斥鎖就是獨占鎖的一種常規實現。IqP28資訊網——每日最新資訊28at.com

讀寫鎖是共享鎖的一種具體實現。讀寫鎖管理一組鎖,一個是只讀的鎖,一個是寫鎖。IqP28資訊網——每日最新資訊28at.com

讀鎖可以再沒有寫鎖的時候被多個線程同時持有,而寫鎖是獨占的,于此同時寫鎖的優先級要高于讀鎖,一個獲得了讀鎖的線程必須能看到前一個釋放的寫鎖更新的內容。IqP28資訊網——每日最新資訊28at.com

讀寫鎖和互斥鎖對比,其性能更高,每次只有一個寫線程,但是有多個線程可以并發讀。IqP28資訊網——每日最新資訊28at.com

IqP28資訊網——每日最新資訊28at.com

讀寫鎖IqP28資訊網——每日最新資訊28at.com

例如,ReentrantReadWriteLock。具體偽代碼如下:IqP28資訊網——每日最新資訊28at.com

import java.util.concurrent.locks.ReentrantReadWriteLock;/** * 公眾號:程序員老貓 **/public class ReadWriteLockDemo {    private ReentrantReadWriteLock lock = new ReentrantReadWriteLock();    public void readData() {        lock.readLock().lock(); // 獲取讀鎖        try {            // 讀取共享數據        } finally {            lock.readLock().unlock(); // 釋放讀鎖        }    }    public void writeData() {        lock.writeLock().lock(); // 獲取寫鎖        try {           // 修改或寫入數據        } finally {            lock.writeLock().unlock(); // 釋放寫鎖        }    }}

公平鎖和非公平鎖:多線程競爭時是否要排隊

我們根據多線程在競爭鎖的時候是否需要排隊從來判斷其鎖的類型是公平鎖還是非公平鎖。IqP28資訊網——每日最新資訊28at.com

公平鎖指多個線程按照申請鎖的順序來獲取鎖。類似食堂排隊打飯,先到的可以先打飯。IqP28資訊網——每日最新資訊28at.com

IqP28資訊網——每日最新資訊28at.com

公平鎖IqP28資訊網——每日最新資訊28at.com

非公平鎖是指多個線程獲取鎖的順序并不是按照申請鎖的順序進行的,有可能后申請的比先申請的優先獲得鎖,高并發場景下,優先級就有可能發生反轉。如下圖:IqP28資訊網——每日最新資訊28at.com

IqP28資訊網——每日最新資訊28at.com

咱們在日常開發的過程中經常用到synchronized,其底層其實就是非公平鎖。當然如果我們要使用公平鎖的情況下,我們也可以使用ReentrantLock。偽代碼如下:IqP28資訊網——每日最新資訊28at.com

Lock lock = new ReetrantLock(false);

ReentrantLock默認為非公平鎖,設置為true的時候表示公平鎖。當設置為false的時候表示非公平鎖。IqP28資訊網——每日最新資訊28at.com

可重入鎖和不可重入鎖:同一個線程中多個流程是否能夠獲取同一把鎖。IqP28資訊網——每日最新資訊28at.com

如果一個線程中的多個流程能夠獲取同一把鎖,那么我們就叫該所為可重入鎖,反之則為不可重入鎖。咱們光看文字描述的話可能比較抽象。我們看一下下圖。IqP28資訊網——每日最新資訊28at.com

IqP28資訊網——每日最新資訊28at.com

在Java中可重入鎖一般有ReentrantLock,其命名就已經很明確了。另外的synchronized也是可重入鎖。可重入鎖的優勢是可以一定程度上避免死鎖發生。上面的示意圖轉換為如下demo:IqP28資訊網——每日最新資訊28at.com

public synchronized void methodA() {  methodB()}public synchronized void methodB() {  methodC()}public synchronized void methodC(){  doSomeThing()}

自旋鎖或者自適應自旋鎖:線程鎖定同步資源失敗,如該線程沒有被阻塞場景下發生

如果一個線程鎖住同步資源失敗,但是又希望這個線程不被阻塞,那么此時咱們就可以使用自旋鎖或者自適應自旋鎖。自旋鎖指線程沒有獲得鎖的情況下不被掛起,而是執行一個忙循環。那么這個忙循環的話就成為自旋。如下:IqP28資訊網——每日最新資訊28at.com

IqP28資訊網——每日最新資訊28at.com

自旋鎖IqP28資訊網——每日最新資訊28at.com

目的:減少線程被掛起的概率,因為線程被掛起和喚醒也是消費資源。IqP28資訊網——每日最新資訊28at.com

Java中AtomicInteger類就有自旋的操作,如下源代碼:IqP28資訊網——每日最新資訊28at.com

@HotSpotIntrinsicCandidate    public final int getAndAddInt(Object o, long offset, int delta) {        int v;        do {            v = getIntVolatile(o, offset);        } while (!weakCompareAndSetInt(o, offset, v, v + delta));        return v;    }

上述方法中weakCompareAndSetInt(),就可以被稱為是CAS操作,如果失敗,那么會一直循環獲取當前的value值然后進行重試操作。那么這個過程其實就是自旋了。IqP28資訊網——每日最新資訊28at.com

其他分類的鎖

上述我們聊到的這系列的鎖應該是大家聽到比較多的。其實還有其他的分類。在此不做一一展開了,有興趣的小伙伴當然也可以深入去了解一下。例如根據線程競爭同步資源的時候,細節流程是否發生變化,分為偏向鎖、輕量級鎖和重量級鎖。在比如,相信大家對HashMap底層原理倒背如流吧,對ConcurrentHashMap應該也有了解,那么ConcurrentHashMap底層其實將鎖的粒度進一步細化了,存在了分段鎖的概念等等。IqP28資訊網——每日最新資訊28at.com

總結

這些讓人眼花繚亂的鎖,如果面試官問到的話,大家是否能夠說出一二呢?相信看完上面的解釋,大家心里多多少少也有數了吧。當然關于最后一點其他分類的鎖,老貓沒有展開。有興趣的小伙伴可以自行查閱一下這些分類。IqP28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-80826-0.html簡直了,被“Java并發鎖”問題追問到自閉

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 在線小工具用得好,辦事效率高一倍,工資翻一倍

下一篇: 探索Golang的優雅爬蟲框架 Colly

標簽:
  • 熱門焦點
  • 鴻蒙OS 4.0公測機型公布:甚至連nova6都支持

    華為全新的HarmonyOS 4.0操作系統將于今天下午正式登場,官方在發布會之前也已經正式給出了可升級的機型產品,這意味著這些機型會率先支持升級享用。這次的HarmonyOS 4.0支持
  • 28個SpringBoot項目中常用注解,日常開發、求職面試不再懵圈

    前言在使用SpringBoot開發中或者在求職面試中都會使用到很多注解或者問到注解相關的知識。本文主要對一些常用的注解進行了總結,同時也會舉出具體例子,供大家學習和參考。注解
  • 2023 年的 Node.js 生態系統

    隨著技術的不斷演進和創新,Node.js 在 2023 年達到了一個新的高度。Node.js 擁有一個龐大的生態系統,可以幫助開發人員更快地實現復雜的應用。本文就來看看 Node.js 最新的生
  • CSS單標簽實現轉轉logo

    轉轉品牌升級后更新了全新的Logo,今天我們用純CSS來實現轉轉的新Logo,為了有一定的挑戰性,這里我們只使用一個標簽實現,將最大化的使用CSS能力完成Logo的繪制與動畫效果。新logo
  • 微信語音大揭秘:為什么禁止轉發?

    大家好,我是你們的小米。今天,我要和大家聊一個有趣的話題:為什么微信語音不可以轉發?這是一個我們經常在日常使用中遇到的問題,也是一個讓很多人好奇的問題。讓我們一起來揭開這
  • 猿輔導與新東方的兩種“歸途”

    作者|卓心月 出品|零態LT(ID:LingTai_LT)如何成為一家偉大企業?答案一定是對“勢”的把握,這其中最關鍵的當屬對企業戰略的制定,且能夠站在未來看現在,即使這其中的
  • 蘋果、三星、惠普等暫停向印度出口筆記本和平板電腦

    集微網消息,據彭博社報道,在8月3日印度突然禁止在沒有許可證的情況下向印度進口電腦/平板及顯示器等產品后,蘋果、三星電子和惠普等大公司暫停向印度
  • 到手價3099元起!iQOO Neo8 Pro今日首銷:安卓性能最強旗艦

    5月23日,iQOO如期舉行了新品發布會,全新的iQOO Neo8系列也正式與大家見面,包含iQOO Neo8和iQOO Neo8 Pro兩個版本,其中標準版搭載高通驍龍8+,而Pro版更
  • 中關村論壇11月25日開幕,15位諾獎級大咖將發表演講

    11月18日,記者從2022中關村論壇新聞發布會上獲悉,中關村論壇將于11月25至30日在京舉行。本屆中關村論壇由科學技術部、國家發展改革委、工業和信息化部、國務
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
久久噜噜亚洲综合| 欧美中文字幕精品| 亚洲国产日韩在线| 亚洲人成网站色ww在线| 亚洲视频免费观看| 久久激情五月婷婷| 欧美福利电影网| 国产精品久久久久999| 国内精品久久久久影院优| 91久久精品国产91久久性色tv | 精品51国产黑色丝袜高跟鞋| 在线成人国产| 一本色道久久88综合亚洲精品ⅰ | 国产精品久久久99| 国产一区二区三区在线观看免费| 亚洲电影av| 亚洲午夜精品久久久久久浪潮| 久久福利精品| 欧美日韩国产一区| 国产亚洲欧洲997久久综合| 亚洲精品影视在线观看| 性欧美18~19sex高清播放| 麻豆精品传媒视频| 国产精品久久国产精麻豆99网站| 在线观看亚洲精品视频| 亚洲一区二区三区激情| 美国十次了思思久久精品导航| 欧美日韩午夜| 在线播放日韩欧美| 亚洲欧美国产日韩中文字幕| 欧美jizzhd精品欧美喷水 | 99热这里只有成人精品国产| 久久狠狠一本精品综合网| 欧美日韩国产影片| 好吊妞这里只有精品| 亚洲线精品一区二区三区八戒| 久久久久久综合| 国产精品国码视频| 亚洲精品色图| 久久亚洲视频| 国产欧美精品一区二区三区介绍| 亚洲欧洲精品成人久久奇米网| 欧美一区日韩一区| 国产精品超碰97尤物18| 亚洲国内自拍| 久久综合九色综合久99| 国产毛片一区二区| 亚洲深夜影院| 欧美精品一区二区视频| 在线观看中文字幕亚洲| 欧美伊人精品成人久久综合97| 欧美午夜a级限制福利片| 亚洲黑丝一区二区| 久久偷窥视频| 狠狠狠色丁香婷婷综合久久五月 | 国产精品一区免费观看| 99精品欧美一区二区三区综合在线 | 欧美国产三级| 国内精品一区二区| 亚洲综合清纯丝袜自拍| 欧美另类一区二区三区| 永久免费精品影视网站| 欧美在线免费播放| 国产精品午夜电影| 亚洲午夜久久久久久久久电影院| 欧美第一黄色网| 亚洲国产精品欧美一二99| 久久青草久久| 国内精品久久久久影院优| 亚洲女同同性videoxma| 欧美四级伦理在线| 在线亚洲一区二区| 欧美日韩三区| 99精品视频免费全部在线| 欧美激情精品久久久六区热门| 亚洲高清不卡| 欧美88av| 最新日韩欧美| 欧美国产第一页| 亚洲精选一区二区| 欧美经典一区二区三区| 亚洲精品乱码久久久久久蜜桃麻豆| 蜜桃久久av一区| 亚洲国产小视频| 免费成人美女女| 亚洲国产成人久久综合| 免费日韩视频| 亚洲激情综合| 欧美日本亚洲视频| 亚洲一区二区欧美| 国产精品视频自拍| 羞羞漫画18久久大片| 国产欧美丝祙| 久久国产精品黑丝| 在线不卡免费欧美| 媚黑女一区二区| 亚洲精品国产拍免费91在线| 欧美日本簧片| 亚洲一区影院| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲国产精品悠悠久久琪琪| 欧美二区在线观看| 99在线观看免费视频精品观看| 欧美激情一二区| 一区二区福利| 国产精品视频xxx| 久久国产精品色婷婷| 在线日本成人| 欧美大色视频| 宅男66日本亚洲欧美视频| 国产精品视频久久| 久久久久久久网站| 亚洲精品激情| 国产精品激情电影| 久久精视频免费在线久久完整在线看| 樱桃成人精品视频在线播放| 欧美国产免费| 亚洲综合日韩在线| 伊人狠狠色j香婷婷综合| 欧美大尺度在线| 亚洲无玛一区| 一区在线视频观看| 欧美日韩一区二区免费在线观看| 亚洲欧美日韩爽爽影院| 伊伊综合在线| 欧美三级在线视频| 久久精品在这里| 亚洲乱码国产乱码精品精可以看| 国产精品久久久久9999| 久久婷婷国产综合尤物精品| 一区二区精品在线观看| 黑丝一区二区| 欧美三区在线视频| 久久蜜桃资源一区二区老牛| 99riav久久精品riav| 国产婷婷97碰碰久久人人蜜臀| 欧美不卡视频一区| 亚洲欧美日韩中文在线制服| 在线日韩电影| 国产精品大片免费观看| 久久综合国产精品| 制服丝袜亚洲播放| 在线观看国产成人av片| 国产精品国产三级欧美二区| 久久亚洲色图| 亚洲免费在线| 亚洲精品偷拍| 韩日欧美一区| 国产精品久久午夜| 蜜臀99久久精品久久久久久软件| 亚洲综合色自拍一区| 亚洲激情综合| 韩曰欧美视频免费观看| 国产精品理论片在线观看| 欧美国产日韩一二三区| 久久精品二区| 亚洲伊人一本大道中文字幕| 91久久精品国产91久久| 国产一区二区三区精品久久久| 欧美日韩精品一本二本三本| 久久野战av| 欧美一区二区三区播放老司机| 99re6这里只有精品| **网站欧美大片在线观看| 国产精品一级久久久| 欧美日韩激情小视频| 欧美成人精品在线播放| 久久精品五月| 欧美亚洲视频在线看网址| 一区二区三区国产在线观看| 在线观看欧美日本| 国产欧美日韩一区| 国产精品v欧美精品∨日韩| 欧美激情亚洲国产| 乱人伦精品视频在线观看| 欧美中文字幕视频| 亚洲欧美日韩精品久久久久| 一本综合精品| 99re8这里有精品热视频免费 | 国产精品美女999| 欧美日韩成人在线播放| 免费影视亚洲| 久久亚洲综合网| 久久久久久黄| 久久成人资源| 欧美一区观看| 欧美一区二区精美| 亚洲欧美国产精品桃花 | 免费不卡视频| 久久视频免费观看| 久久免费国产| 久久精品亚洲精品| 久久国产精品久久国产精品| 午夜精品久久久| 亚洲女同在线| 亚洲欧美国产高清va在线播| 亚洲一区二区在线看| 亚洲午夜精品17c| 中文久久乱码一区二区| 一区二区欧美在线| 中文高清一区| 中文在线不卡视频| 亚洲一区二区综合| 亚洲欧美日韩中文在线制服|