日韩欧乱色一区二区三区在线_久久―日本道色综合久久_欧美日本一区二区_网曝91综合精品门事件在线

千鋒教育-做有情懷、有良心、有品質(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?

什么是synchronized?

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

一、synchronized含義

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

synchronized的作用是保證在同一時(shí)刻, 被修飾的代碼塊或方法只會(huì)有一個(gè)線程執(zhí)行,以達(dá)到保證并發(fā)安全的效果。synchronized是Java中解決并發(fā)問(wèn)題的一種最常用的方法,也是最簡(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í)行的過(guò)程不會(huì)被任何因素打斷,要么就都不執(zhí)行。被synchronized修飾的類(lèi)或?qū)ο蟮乃胁僮鞫际窃拥模驗(yàn)樵趫?zhí)行操作之前必須先獲得類(lèi)或?qū)ο蟮逆i,直到執(zhí)行完才能釋放。

2、可見(jiàn)性

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

3、有序性

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

三、synchronized的使用

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

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

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

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

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

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

3、修飾代碼塊

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

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

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

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

聲明:本站稿件版權(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
為什么分布式數(shù)據(jù)庫(kù)這么喜歡用kv store?

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

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

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

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

一、物聯(lián)網(wǎng)云平臺(tái)的數(shù)據(jù)庫(kù)1、關(guān)系型數(shù)據(jù)庫(kù)(RDBMS)例如MySQL、PostgreSQL、Oracle等。關(guān)系型數(shù)據(jù)庫(kù)以表格的形式存儲(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的尺寸更多一些,但是總體上來(lái)說(shuō),移動(dòng)端的載體手機(jī)屏幕不大,能承載的信息...詳情>>

2023-10-12 20:59:19
快速通道
主站蜘蛛池模板: 江山市| 连州市| 佛冈县| 东海县| 金塔县| 图木舒克市| 新乡县| 武安市| 土默特左旗| 原阳县| 金寨县| 中方县| 罗田县| 通许县| 祁门县| 玛曲县| 灵寿县| 渭南市| 桓仁| 阳山县| 普安县| 潮安县| 息烽县| 铁力市| 咸丰县| 沙田区| 江华| 东光县| 剑川县| 土默特右旗| 木兰县| 新营市| 济南市| 泰来县| 北流市| 连平县| 大同市| 海南省| 保山市| 明水县| 启东市|