Java并發(fā)之synchronized關(guān)鍵字

synchronized關(guān)鍵字

1 簡(jiǎn)單介紹

  • synchronized 是java語(yǔ)言關(guān)鍵字,當(dāng)它用來(lái)修飾一個(gè)方法或者一個(gè)代碼塊的時(shí)候彤断,能夠保證在同一時(shí)刻最多只有一個(gè)線程執(zhí)行該段代碼潮剪。
  • synchronized 關(guān)鍵字,它包括兩種用法:synchronized 方法和 synchronized 塊。

2 可以修飾哪些內(nèi)容

  • 一自晰、 修飾一個(gè)代碼塊,被修飾的代碼塊稱為同步語(yǔ)句塊,其作用的范圍是大括號(hào){}括起來(lái)的代碼屠阻,作用的對(duì)象是調(diào)用這個(gè)代碼塊的對(duì)象;

  • 二额各、修飾一個(gè)方法国觉,被修飾的方法稱為同步方法,其作用的范圍是整個(gè)方法虾啦,作用的對(duì)象是調(diào)用這個(gè)方法的對(duì)象麻诀;

  • 三、修飾一個(gè)靜態(tài)的方法傲醉,其作用的范圍是整個(gè)靜態(tài)方法蝇闭,作用的對(duì)象是這個(gè)類的所有對(duì)象;

  • 四硬毕、修飾一個(gè)類呻引,其作用的范圍是synchronized后面括號(hào)括起來(lái)的部分,作用的對(duì)象是這個(gè)類的所有對(duì)象吐咳。

3.synchonized(this)和synchonized(object)區(qū)別

  • 其實(shí)并沒(méi)有很大的區(qū)別逻悠,synchonized(object)本身就包含synchonized(this)這種情況,使用的場(chǎng)景都是對(duì)一個(gè)代碼塊進(jìn)行加鎖韭脊,效率比直接在方法名上加synchonized高一些(下面分析)童谒,唯一的區(qū)別就是對(duì)象的不同。

  • 對(duì)synchronized(this)的一些理解

    • 一沪羔、當(dāng)兩個(gè)并發(fā)線程訪問(wèn)同一個(gè)對(duì)象object中的這個(gè)synchronized(this)同步代碼塊時(shí)饥伊,一個(gè)時(shí)間內(nèi)只能有一個(gè)線程得到執(zhí)行。另一個(gè)線程必須等待當(dāng)前線程執(zhí)行完這個(gè)代碼塊以后才能執(zhí)行該代碼塊。

    • 二琅豆、然而愉豺,當(dāng)一個(gè)線程訪問(wèn)object的一個(gè)synchronized(this)同步代碼塊時(shí),另一個(gè)線程仍然可以訪問(wèn)該object中的非synchronized(this)同步代碼塊茫因。

    • 三粒氧、尤其關(guān)鍵的是,當(dāng)一個(gè)線程訪問(wèn)object的一個(gè)synchronized(this)同步代碼塊時(shí)节腐,其他線程對(duì)object中所有其它synchronized(this)同步代碼塊的訪問(wèn)將被阻塞。

    • 四摘盆、當(dāng)一個(gè)線程訪問(wèn)object的一個(gè)synchronized(this)同步代碼塊時(shí)翼雀,它就獲得了這個(gè)object的對(duì)象鎖。結(jié)果孩擂,其它線程對(duì)該object對(duì)象所有同步代碼部分的訪問(wèn)都被暫時(shí)阻塞狼渊。

4.sychonized method 和 synchonized代碼塊的效率問(wèn)題

  • 使用前者的對(duì)象會(huì)獲取該對(duì)象中所有synchonized的鎖,也就是其他線程不能訪問(wèn)所有加了synchonized前綴的方法(不僅僅只是當(dāng)前運(yùn)行的方法)类垦,影響了其他線程同步方法的訪問(wèn)狈邑,降低了效率。而后者只對(duì)當(dāng)前代碼塊加鎖蚤认,其他的同步方法不受影響米苹。

5.結(jié)論

  • 1.synchronized 方法控制對(duì)類成員變量的訪問(wèn):每個(gè)類實(shí)例對(duì)應(yīng)一把鎖,每個(gè) synchronized 方法都必須獲得調(diào)用該方法的類實(shí)例的鎖方能執(zhí)行砰琢,否則所屬線程阻塞蘸嘶,方法一旦執(zhí)行,就獨(dú)占該鎖陪汽,直到從該方法返回時(shí)才將鎖釋放训唱,此后被阻塞的線程方能獲得該鎖,重新進(jìn)入可執(zhí)行狀態(tài)挚冤。這種機(jī)制確保了同一時(shí)刻對(duì)于每一個(gè)類實(shí)例况增,其所有聲明為 synchronized 的成員函數(shù)中至多只有一個(gè)處于可執(zhí)行狀態(tài)(因?yàn)橹炼嘀挥幸粋€(gè)能夠獲得該類實(shí)例對(duì)應(yīng)的鎖),從而有效避免了類成員變量的訪問(wèn)沖突(只要所有可能訪問(wèn)類成員變量的方法均被聲明為 synchronized)训挡。

  • 2.synchronized 塊是這樣一個(gè)代碼塊澳骤,其中的代碼必須獲得對(duì)象 syncObject (如前所述,可以是類實(shí)例或類)的鎖方能執(zhí)行舍哄。由于可以針對(duì)任意代碼塊宴凉,且可任意指定上鎖的對(duì)象,故靈活性較高表悬。

  • 3.在static方法前加synchronized:靜態(tài)方法屬于類方法弥锄,它屬于這個(gè)類,獲取到的鎖,是屬于類的鎖籽暇。

  • 4.在普通方法前加synchronized:非static方法獲取到的鎖温治,是屬于當(dāng)前對(duì)象的鎖。

  • 5.類鎖和對(duì)象鎖不同戒悠,synchronized修飾不加static的方法熬荆,鎖是加在單個(gè)對(duì)象上,不同的對(duì)象沒(méi)有競(jìng)爭(zhēng)關(guān)系绸狐;修飾加了static的方法卤恳,鎖是加載類上,這個(gè)類所有的對(duì)象競(jìng)爭(zhēng)一把鎖寒矿。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末突琳,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子符相,更是在濱河造成了極大的恐慌拆融,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件啊终,死亡現(xiàn)場(chǎng)離奇詭異镜豹,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蓝牲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門趟脂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人例衍,你說(shuō)我怎么就攤上這事散怖。” “怎么了肄渗?”我有些...
    開(kāi)封第一講書人閱讀 167,834評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵镇眷,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我翎嫡,道長(zhǎng)欠动,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 59,543評(píng)論 1 296
  • 正文 為了忘掉前任惑申,我火速辦了婚禮具伍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘圈驼。我一直安慰自己人芽,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布绩脆。 她就那樣靜靜地躺著萤厅,像睡著了一般橄抹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上惕味,一...
    開(kāi)封第一講書人閱讀 52,196評(píng)論 1 308
  • 那天楼誓,我揣著相機(jī)與錄音,去河邊找鬼名挥。 笑死疟羹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的禀倔。 我是一名探鬼主播榄融,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼救湖!你這毒婦竟也來(lái)了剃袍?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,671評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤捎谨,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后憔维,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體涛救,經(jīng)...
    沈念sama閱讀 46,221評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評(píng)論 3 340
  • 正文 我和宋清朗相戀三年业扒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了检吆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,444評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡程储,死狀恐怖蹭沛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情章鲤,我是刑警寧澤摊灭,帶...
    沈念sama閱讀 36,134評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站败徊,受9級(jí)特大地震影響帚呼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜皱蹦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評(píng)論 3 333
  • 文/蒙蒙 一煤杀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧沪哺,春花似錦沈自、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,285評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)忌怎。三九已至,卻和暖如春柔袁,著一層夾襖步出監(jiān)牢的瞬間呆躲,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,399評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工捶索, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留插掂,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,837評(píng)論 3 376
  • 正文 我出身青樓腥例,卻偏偏與公主長(zhǎng)得像辅甥,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子燎竖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容