「iOS」synchronized關(guān)鍵字的含義和用法

Objective-C支持程序中的多線程壁拉。這就意味著兩個線程有可能同時修改同一個對象农渊,這將在程序中導(dǎo)致嚴重的問題贝或。為了避免這種多個線程同時執(zhí)行同一段代碼的情況芝发,Objective-C提供了@synchronized()指令渡讼。

指令@synchronized()通過對一段代碼的使用進行加鎖骂束。其他試圖執(zhí)行該段代碼的線程都會被阻塞,直到加鎖線程退出執(zhí)行該段被保護的代碼段成箫,也就是說@synchronized()代碼塊中的最后一條語句已經(jīng)被執(zhí)行完畢的時候展箱。

指令@synchronized()需要一個參數(shù)。該參數(shù)可以使任何的Objective-C對象蹬昌,包括self混驰。這個對象就是互斥信號量。他能夠讓一個線程對一段代碼進行保護皂贩,避免別的線程執(zhí)行該段代碼栖榨。針對程序中的不同的關(guān)鍵代碼段,我們應(yīng)該分別使用不同的信號量先紫。只有在應(yīng)用程序編程執(zhí)行多線程之前就創(chuàng)建好所有需要的互斥信號量對象來避免線程間的競爭才是最安全的治泥。

@synchronized,代表這個方法加鎖, 相當于不管哪一個線程(例如線程A)遮精,運行到這個方法時,都要檢查有沒有其它線程例如B正在用這個方法居夹,有的話要等正在使用synchronized方法的線程B運行完這個方法后再運行此線程A,沒有的話,直接運行。它包括兩種用法:synchronized 方法和 synchronized 塊本冲。

@synchronized 方法

控制對類(一般在IOS中用在單例中)的訪問:每個類實例對應(yīng)一把鎖准脂,每個 synchronized 方法都必須獲得調(diào)用該方法鎖方能執(zhí)行,否則所屬就會發(fā)生線程阻塞檬洞,方法一旦執(zhí)行狸膏,就獨占該鎖,直到從該方法返回時才將鎖釋放添怔,此后被阻塞的線程方能獲得該鎖湾戳,重新進入可執(zhí)行狀態(tài)。這種機制確保了同一時刻對于每一個類广料,至多只有一個處于可執(zhí)行狀態(tài)砾脑,從而有效避免了類成員變量的訪問沖突(只要所有可能訪問類的方法均被聲明為 synchronized)。

@synchronized 塊

通過 synchronized關(guān)鍵字來聲明synchronized 塊艾杏。語法如下:
  @synchronized(syncObject) { }
  synchronized 塊是這樣一個代碼塊韧衣,其中的代碼必須獲得對象 syncObject (如前所述,可以是類實例或類)的鎖方能執(zhí)行,具體機制同前所述畅铭。由于可以針對任意代碼塊氏淑,且可任意指定上鎖的對象,故靈活性較高硕噩。

用法

static Config * instance = nil;

+(Config *) Instance {

    @synchronized(self)  {

        if(nil == instance)  {

            [self new];

        }
    }
    return instance;
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末假残,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子榴徐,更是在濱河造成了極大的恐慌守问,老刑警劉巖匀归,帶你破解...
    沈念sama閱讀 212,185評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坑资,死亡現(xiàn)場離奇詭異,居然都是意外死亡穆端,警方通過查閱死者的電腦和手機袱贮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,445評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來体啰,“玉大人攒巍,你說我怎么就攤上這事』挠拢” “怎么了柒莉?”我有些...
    開封第一講書人閱讀 157,684評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長沽翔。 經(jīng)常有香客問我兢孝,道長,這世上最難降的妖魔是什么仅偎? 我笑而不...
    開封第一講書人閱讀 56,564評論 1 284
  • 正文 為了忘掉前任跨蟹,我火速辦了婚禮,結(jié)果婚禮上橘沥,老公的妹妹穿的比我還像新娘窗轩。我一直安慰自己,他們只是感情好座咆,可當我...
    茶點故事閱讀 65,681評論 6 386
  • 文/花漫 我一把揭開白布痢艺。 她就那樣靜靜地躺著,像睡著了一般介陶。 火紅的嫁衣襯著肌膚如雪堤舒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,874評論 1 290
  • 那天斤蔓,我揣著相機與錄音植酥,去河邊找鬼。 笑死,一個胖子當著我的面吹牛友驮,可吹牛的內(nèi)容都是我干的漂羊。 我是一名探鬼主播,決...
    沈念sama閱讀 39,025評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼卸留,長吁一口氣:“原來是場噩夢啊……” “哼走越!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起耻瑟,我...
    開封第一講書人閱讀 37,761評論 0 268
  • 序言:老撾萬榮一對情侶失蹤旨指,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后喳整,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谆构,經(jīng)...
    沈念sama閱讀 44,217評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,545評論 2 327
  • 正文 我和宋清朗相戀三年框都,在試婚紗的時候發(fā)現(xiàn)自己被綠了搬素。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,694評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡魏保,死狀恐怖熬尺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情谓罗,我是刑警寧澤粱哼,帶...
    沈念sama閱讀 34,351評論 4 332
  • 正文 年R本政府宣布,位于F島的核電站檩咱,受9級特大地震影響揭措,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜税手,卻給世界環(huán)境...
    茶點故事閱讀 39,988評論 3 315
  • 文/蒙蒙 一蜂筹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧芦倒,春花似錦艺挪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,778評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至器钟,卻和暖如春津坑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背傲霸。 一陣腳步聲響...
    開封第一講書人閱讀 32,007評論 1 266
  • 我被黑心中介騙來泰國打工疆瑰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留眉反,地道東北人。 一個月前我還...
    沈念sama閱讀 46,427評論 2 360
  • 正文 我出身青樓穆役,卻偏偏與公主長得像寸五,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子耿币,可洞房花燭夜當晚...
    茶點故事閱讀 43,580評論 2 349

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

  • Java8張圖 11梳杏、字符串不變性 12、equals()方法淹接、hashCode()方法的區(qū)別 13十性、...
    Miley_MOJIE閱讀 3,696評論 0 11
  • 一、進程和線程 進程 進程就是一個執(zhí)行中的程序?qū)嵗艿浚總€進程都有自己獨立的一塊內(nèi)存空間劲适,一個進程中可以有多個線程。...
    阿敏其人閱讀 2,611評論 0 13
  • 從三月份找實習(xí)到現(xiàn)在拢肆,面了一些公司减响,掛了不少,但最終還是拿到小米郭怪、百度、阿里刊橘、京東鄙才、新浪、CVTE促绵、樂視家的研發(fā)崗...
    時芥藍閱讀 42,214評論 11 349
  • 本文出自 Eddy Wiki 攒庵,轉(zhuǎn)載請注明出處:http://eddy.wiki/interview-java.h...
    eddy_wiki閱讀 2,076評論 0 14
  • 這是電影《如果愛》里的片段 學(xué)友和池珍熙在面館里對話。 學(xué)友說:“…我很想拍一部簡簡單單的愛情故事败晴,后來忘記了…今...
    艾澤拉斯的霞光閱讀 542評論 0 2