久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲va中文字幕无码久|伊人久久综合狼伊人久久|亚洲不卡av不卡一区二区|精品久久久久久久蜜臀AV|国产精品19久久久久久不卡|国产男女猛烈视频在线观看麻豆

    1. <style id="76ofp"></style>

      <style id="76ofp"></style>
      <rt id="76ofp"></rt>
      <form id="76ofp"><optgroup id="76ofp"></optgroup></form>
      1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

        手機(jī)站
        千鋒教育

        千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

        千鋒教育

        掃一掃進(jìn)入千鋒手機(jī)站

        領(lǐng)取全套視頻
        千鋒教育

        關(guān)注千鋒學(xué)習(xí)站小程序
        隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

        當(dāng)前位置:首頁(yè)  >  技術(shù)干貨  > Synchronized和Lock的對(duì)比和選擇

        Synchronized和Lock的對(duì)比和選擇

        來(lái)源:千鋒教育
        發(fā)布人:syq
        時(shí)間: 2022-09-08 17:11:44 1662628304

          存在層次上

          synchronized: Java的關(guān)鍵字,在jvm層面上

          Lock: 是一個(gè)接口

          鎖的釋放

        Synchronized和Lock

          synchronized: 1、以獲取鎖的線(xiàn)程執(zhí)行完同步代碼,釋放鎖 2、線(xiàn)程執(zhí)行發(fā)生異常,jvm會(huì)讓線(xiàn)程釋放鎖

          Lock: 在finally中必須釋放鎖,不然容易造成線(xiàn)程死鎖

          鎖的獲取

          synchronized: 假設(shè)A線(xiàn)程獲得鎖,B線(xiàn)程等待。如果A線(xiàn)程阻塞,B線(xiàn)程會(huì)一直等待

          Lock: 分情況而定,Lock有多個(gè)鎖獲取的方式,大致就是可以嘗試獲得鎖,線(xiàn)程可以不用一直等待(可以通過(guò)tryLock判斷有沒(méi)有鎖)

          鎖的釋放(死鎖產(chǎn)生)

          synchronized: 在發(fā)生異常時(shí)候會(huì)自動(dòng)釋放占有的鎖,因此不會(huì)出現(xiàn)死鎖

          Lock: 發(fā)生異常時(shí)候,不會(huì)主動(dòng)釋放占有的鎖,必須手動(dòng)unlock來(lái)釋放鎖,可能引起死鎖的發(fā)生

          鎖的狀態(tài)

          synchronized: 無(wú)法判斷

          Lock: 可以判斷

          鎖的類(lèi)型

          synchronized: 可重入 不可中斷 非公平

          Lock: 可重入 可判斷 可公平(兩者皆可)

          性能

          synchronized: 少量同步

          Lock: 大量同步

          Lock可以提高多個(gè)線(xiàn)程進(jìn)行讀操作的效率。(可以通過(guò)readwritelock實(shí)現(xiàn)讀寫(xiě)分離)

          在資源競(jìng)爭(zhēng)不是很激烈的情況下,Synchronized的性能要優(yōu)于ReetrantLock,但是在資源競(jìng)爭(zhēng)很激烈的情況下,Synchronized的性能會(huì)下降幾十倍,但是ReetrantLock的性能能維持常態(tài);

          ReentrantLock提供了多樣化的同步,比如有時(shí)間限制的同步,可以被Interrupt的同步(synchronized的同步是不能Interrupt的)等。在資源競(jìng)爭(zhēng)不激烈的情形下,性能稍微比synchronized差點(diǎn)點(diǎn)。但是當(dāng)同步非常激烈的時(shí)候,synchronized的性能一下子能下降好幾十倍。而ReentrantLock確還能維持常態(tài)。

          調(diào)度

          synchronized: 使用Object對(duì)象本身的wait 、notify、notifyAll調(diào)度機(jī)制

          Lock: 可以使用Condition進(jìn)行線(xiàn)程之間的調(diào)度

          用法

          synchronized: 在需要同步的對(duì)象中加入此控制,synchronized可以加在方法上,也可以加在特定代碼塊中,括號(hào)中表示需要鎖的對(duì)象。

          Lock: 一般使用ReentrantLock類(lèi)做為鎖。在加鎖和解鎖處需要通過(guò)lock()和unlock()顯示指出。所以一般會(huì)在finally塊中寫(xiě)unlock()以防死鎖。

          底層實(shí)現(xiàn)

          synchronized: 底層使用指令碼方式來(lái)控制鎖的,映射成字節(jié)碼指令就是增加來(lái)兩個(gè)指令:monitorenter和monitorexit。當(dāng)線(xiàn)程執(zhí)行遇到monitorenter指令時(shí)會(huì)嘗試獲取內(nèi)置鎖,如果獲取鎖則鎖計(jì)數(shù)器+1,如果沒(méi)有獲取鎖則阻塞;當(dāng)遇到monitorexit指令時(shí)鎖計(jì)數(shù)器-1,如果計(jì)數(shù)器為0則釋放鎖。

          Lock: 底層是CAS樂(lè)觀(guān)鎖,依賴(lài)AbstractQueuedSynchronizer類(lèi),把所有的請(qǐng)求線(xiàn)程構(gòu)成一個(gè)CLH隊(duì)列。而對(duì)該隊(duì)列的操作均通過(guò)Lock-Free(CAS)操作。

        tags:
        聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
        10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
        請(qǐng)您保持通訊暢通,專(zhuān)屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
        免費(fèi)領(lǐng)取
        今日已有369人領(lǐng)取成功
        劉同學(xué) 138****2860 剛剛成功領(lǐng)取
        王同學(xué) 131****2015 剛剛成功領(lǐng)取
        張同學(xué) 133****4652 剛剛成功領(lǐng)取
        李同學(xué) 135****8607 剛剛成功領(lǐng)取
        楊同學(xué) 132****5667 剛剛成功領(lǐng)取
        岳同學(xué) 134****6652 剛剛成功領(lǐng)取
        梁同學(xué) 157****2950 剛剛成功領(lǐng)取
        劉同學(xué) 189****1015 剛剛成功領(lǐng)取
        張同學(xué) 155****4678 剛剛成功領(lǐng)取
        鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
        董同學(xué) 138****2867 剛剛成功領(lǐng)取
        周同學(xué) 136****3602 剛剛成功領(lǐng)取
        相關(guān)推薦HOT
        軟件定制開(kāi)發(fā)中的敏捷開(kāi)發(fā)是什么?

        軟件定制開(kāi)發(fā)中的敏捷開(kāi)發(fā)是什么軟件定制開(kāi)發(fā)中的敏捷開(kāi)發(fā),從宏觀(guān)上看,是一個(gè)高度關(guān)注人員交互,持續(xù)開(kāi)發(fā)與交付,接受需求變更并適應(yīng)環(huán)境變化...詳情>>

        2023-10-14 13:24:57
        什么是PlatformIo?

        PlatformIO是什么PlatformIO是一個(gè)全面的物聯(lián)網(wǎng)開(kāi)發(fā)平臺(tái),它為眾多硬件平臺(tái)和開(kāi)發(fā)環(huán)境提供了統(tǒng)一的工作流程,有效簡(jiǎn)化了開(kāi)發(fā)過(guò)程,并能兼容各種...詳情>>

        2023-10-14 12:55:06
        云快照與自動(dòng)備份有什么區(qū)別?

        1、定義和目標(biāo)不同云快照的主要目標(biāo)是提供一種快速恢復(fù)數(shù)據(jù)的方法,它只記錄在快照時(shí)間點(diǎn)后的數(shù)據(jù)變化,而不是所有的數(shù)據(jù)。自動(dòng)備份的主要目標(biāo)...詳情>>

        2023-10-14 12:48:59
        服務(wù)器為什么要用Linux?

        服務(wù)器為什么要用Linux作為服務(wù)器操作系統(tǒng)的優(yōu)選,Linux在眾多選擇中脫穎而出。Linux作為服務(wù)器操作系統(tǒng)的優(yōu)選,有其獨(dú)特的優(yōu)勢(shì)和特點(diǎn)。包括其...詳情>>

        2023-10-14 12:34:11
        ORM解決的主要問(wèn)題是什么?

        ORM(對(duì)象關(guān)系映射)解決的主要問(wèn)題是將關(guān)系數(shù)據(jù)庫(kù)與面向?qū)ο缶幊讨g的映射困境。在傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)中,數(shù)據(jù)以表格的形式存儲(chǔ),而在面向?qū)ο?..詳情>>

        2023-10-14 12:26:19
        快速通道
        公主岭市| 宣城市| 威远县| 新田县| 柘城县| 弋阳县| 广丰县| 吴忠市| 岳池县| 兴化市| 嘉兴市| 江永县| 芒康县| 多伦县| 布尔津县| 宾阳县| 潜江市| 东辽县| 广安市| 长宁区| 株洲县| 土默特右旗| 友谊县| 蒲城县| 福泉市| 集安市| 玉山县| 梅州市| 乌兰县| 新沂市| 郑州市| 敦化市| 安国市| 崇信县| 黄陵县| 金堂县| 合作市| 阿拉善右旗| 孝义市| 聂拉木县| 扶沟县|