久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲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)前位置:首頁  >  技術(shù)干貨  > 什么是synchronized?

        什么是synchronized?

        來源:千鋒教育
        發(fā)布人:xqq
        時(shí)間: 2023-10-12 20:34:23 1697114063

        一、synchronized含義

        synchronized是Java語言的關(guān)鍵字,可用來給對(duì)象和方法或者代碼塊加鎖,當(dāng)它鎖定一個(gè)方法或者一個(gè)代碼塊的時(shí)候,同一時(shí)刻非常多只有一個(gè)線程執(zhí)行這段代碼。當(dāng)兩個(gè)并發(fā)線程訪問同一個(gè)對(duì)象object中的這個(gè)加鎖同步代碼塊時(shí),一個(gè)時(shí)間內(nèi)只能有一個(gè)線程得到執(zhí)行。另一個(gè)線程必須等待當(dāng)前線程執(zhí)行完這個(gè)代碼塊以后才能執(zhí)行該代碼塊。然而,當(dāng)一個(gè)線程訪問object的一個(gè)加鎖代碼塊時(shí),另一個(gè)線程仍可以訪問該object中的非加鎖代碼塊。

        synchronized的作用是保證在同一時(shí)刻, 被修飾的代碼塊或方法只會(huì)有一個(gè)線程執(zhí)行,以達(dá)到保證并發(fā)安全的效果。synchronized是Java中解決并發(fā)問題的一種最常用的方法,也是最簡(jiǎn)單的一種方法。在JDK1.5之前synchronized是一個(gè)重量級(jí)鎖,相對(duì)于j.u.c.Lock,它會(huì)顯得那么笨重,隨著Javs SE 1.6對(duì)synchronized進(jìn)行的各種優(yōu)化后,synchronized并不會(huì)顯得那么重了。

        二、synchronized的作用

        1、原子性

        所謂原子性就是指一個(gè)操作或者多個(gè)操作,要么全部執(zhí)行并且執(zhí)行的過程不會(huì)被任何因素打斷,要么就都不執(zhí)行。被synchronized修飾的類或?qū)ο蟮乃胁僮鞫际窃拥?,因?yàn)樵趫?zhí)行操作之前必須先獲得類或?qū)ο蟮逆i,直到執(zhí)行完才能釋放。

        2、可見性

        可見性是指多個(gè)線程訪問一個(gè)資源時(shí),該資源的狀態(tài)、值信息等對(duì)于其他線程都是可見的。synchronized和volatile都具有可見性,其中synchronized對(duì)一個(gè)類或?qū)ο蠹渔i時(shí),一個(gè)線程如果要訪問該類或?qū)ο蟊仨毾全@得它的鎖,而這個(gè)鎖的狀態(tài)對(duì)于其他任何線程都是可見的,并且在釋放鎖之前會(huì)將對(duì)變量的修改刷新到共享內(nèi)存當(dāng)中,保證資源變量的可見性。

        3、有序性

        有序性值程序執(zhí)行的順序按照代碼先后執(zhí)行。 synchronized和volatile都具有有序性,Java允許編譯器和處理器對(duì)指令進(jìn)行重排,但是指令重排并不會(huì)影響單線程的順序,它影響的是多線程并發(fā)執(zhí)行的順序性。synchronized保證了每個(gè)時(shí)刻都只有一個(gè)線程訪問同步代碼塊,也就確定了線程執(zhí)行同步代碼塊是分先后順序的,保證了有序性。

        三、synchronized的使用

        1、修飾實(shí)例方法

        作用于當(dāng)前對(duì)象實(shí)例加鎖,進(jìn)入同步代碼前要獲得當(dāng)前對(duì)象實(shí)例的鎖:

        synchronized void method() {  //業(yè)務(wù)代碼}

        2、修飾靜態(tài)方法

        即給當(dāng)前類加鎖,會(huì)作用于類的所有對(duì)象實(shí)例 ,進(jìn)入同步代碼前要獲得 當(dāng)前 class 的鎖。因?yàn)殪o態(tài)成員不屬于任何一個(gè)實(shí)例對(duì)象,是類成員( static 表明這是該類的一個(gè)靜態(tài)資源,不管 new 了多少個(gè)對(duì)象,只有一份)。所以,如果一個(gè)線程 A 調(diào)用一個(gè)實(shí)例對(duì)象的非靜態(tài) synchronized 方法,而線程 B 需要調(diào)用這個(gè)實(shí)例對(duì)象所屬類的靜態(tài) synchronized 方法,是允許的,不會(huì)發(fā)生互斥現(xiàn)象,因?yàn)樵L問靜態(tài) synchronized 方法占用的鎖是當(dāng)前類的鎖,而訪問非靜態(tài) synchronized 方法占用的鎖是當(dāng)前實(shí)例對(duì)象鎖:

        synchronized void staic method() {  //業(yè)務(wù)代碼}

        3、修飾代碼塊

        指定加鎖對(duì)象,對(duì)給定對(duì)象/類加鎖。synchronized(this|object) 表示進(jìn)入同步代碼庫前要獲得給定對(duì)象的鎖。synchronized(類.class) 表示進(jìn)入同步代碼前要獲得當(dāng)前 class 的鎖:

        synchronized(this) {  //業(yè)務(wù)代碼}

        延伸閱讀1:synchronized 鎖的升級(jí)順序

        鎖主要存在四種狀態(tài),依次是:無鎖狀態(tài)、偏向鎖狀態(tài)、輕量級(jí)鎖狀態(tài)、重量級(jí)鎖狀態(tài),鎖可以從偏向鎖升級(jí)到輕量級(jí)鎖,再升級(jí)的重量級(jí)鎖。但是鎖的升級(jí)是單向的,也就是說只能從低到高升級(jí),不會(huì)出現(xiàn)鎖的降級(jí)。而且這個(gè)過程就是開銷逐漸加大的過程。

        聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
        10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
        請(qǐng)您保持通訊暢通,專屬學(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
        為什么分布式數(shù)據(jù)庫這么喜歡用kv store?

        一、為什么分布式數(shù)據(jù)庫這么喜歡用kv store雖然不論是單機(jī)數(shù)據(jù)庫(MySQL、PostgreSQL等等),還是題主說到的分布式數(shù)據(jù)庫(CockroachDB、TiDB)...詳情>>

        2023-10-12 22:21:18
        想開發(fā)一款直播交友APP需要有哪些功能?

        一、想開發(fā)一款直播交友APP需要的功能 1、直播功能:用戶可以選擇視頻一對(duì)一直播和語音一對(duì)一直播兩種方式,觀眾需要支付直播費(fèi)用,直播費(fèi)用由...詳情>>

        2023-10-12 21:47:55
        物聯(lián)網(wǎng)云平臺(tái)用什么數(shù)據(jù)庫?

        一、物聯(lián)網(wǎng)云平臺(tái)的數(shù)據(jù)庫1、關(guān)系型數(shù)據(jù)庫(RDBMS)例如MySQL、PostgreSQL、Oracle等。關(guān)系型數(shù)據(jù)庫以表格的形式存儲(chǔ)數(shù)據(jù),并使用SQL(Structur...詳情>>

        2023-10-12 21:41:25
        ACTION_CANCEL到底何時(shí)觸發(fā),滑出子View范圍會(huì)發(fā)生什么?

        一、ACTION_CANCEL在這些時(shí)候會(huì)觸發(fā)1、父view攔截事件首先要了解ViewGroup什么情況下會(huì)攔截事件,請(qǐng)看下面一段代碼:@Overridepublic boolean d...詳情>>

        2023-10-12 21:31:42
        設(shè)計(jì)移動(dòng)端表單有哪些注意事項(xiàng)?

        1、分布式表單iPhone目前主要的機(jī)型屏幕尺寸在4.7-5.8英寸,android的尺寸更多一些,但是總體上來說,移動(dòng)端的載體手機(jī)屏幕不大,能承載的信息...詳情>>

        2023-10-12 20:59:19
        快速通道
        集贤县| 广宁县| 巴彦淖尔市| 刚察县| 东莞市| 马山县| 东明县| 剑河县| 太保市| 莆田市| 新巴尔虎左旗| 南投县| 沙洋县| 长海县| 麻城市| 漾濞| 房产| 陈巴尔虎旗| 潮州市| 淄博市| 岳阳市| 莆田市| 台湾省| 陆川县| 木兰县| 玛纳斯县| 山阳县| 平乐县| 新河县| 应城市| 威远县| 静安区| 廉江市| 余干县| 澄迈县| 隆昌县| 华蓥市| 湘潭县| 英超| 阿尔山市| 鄂尔多斯市|