国产睡熟迷奷白丝护士系列精品,中文色字幕网站,免费h网站在线观看的,亚洲开心激情在线

      <sup id="hb9fh"></sup>
          1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)

            手機站
            千鋒教育

            千鋒學習站 | 隨時隨地免費學

            千鋒教育

            掃一掃進入千鋒手機站

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

            關(guān)注千鋒學習站小程序
            隨時隨地免費學習課程

            當前位置:首頁  >  技術(shù)干貨  > 什么是synchronized?

            什么是synchronized?

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

            一、synchronized含義

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

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

            二、synchronized的作用

            1、原子性

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

            2、可見性

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

            3、有序性

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

            三、synchronized的使用

            1、修飾實例方法

            作用于當前對象實例加鎖,進入同步代碼前要獲得當前對象實例的鎖:

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

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

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

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

            3、修飾代碼塊

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

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

            延伸閱讀1:synchronized 鎖的升級順序

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

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

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

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

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

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

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

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

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

            2023-10-12 21:31:42
            設(shè)計移動端表單有哪些注意事項?

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

            2023-10-12 20:59:19