Android 設(shè)計模式—單例模式記要

單例模式

定義:(定義都是抽象的,無需過度在意其意義,設(shè)計模式這種東西只可意會不可言傳)確保一個類只有一個實例尊惰,而且自行實例化并向整個系統(tǒng)提供這個實例贾虽。

單例模式寫法有很多種,因地制宜就行,但關(guān)鍵點都是在并發(fā)問題上:

1.private構(gòu)造函數(shù)

2.public static靜態(tài)公有方法

3.保證線程安全秀仲,適應(yīng)多線程并發(fā)訪問:(2個關(guān)鍵點)

? ? ? ? * 同步鎖synchronized修飾符:避免同時被多個線程訪問,防止線程不同步叹誉,保證并發(fā)情況下的原子性骤公,可見性,有序性上陕。

? ? ? ? ? * Volatile修飾符:本質(zhì)是在告訴jvm當(dāng)前變量在寄存器中的值是不確定的,需要從內(nèi)存中讀取(它修飾的變量的讀寫操作都必須在內(nèi)存中進行)桩砰,保證了多線程共享變量的可見性,原子性(需條件)释簿,有序性(需條件))亚隅。

4.保證訪問性能(例如單例每次訪問都進行synchronized判斷影響性能)

5.相關(guān):因為單例涉及并發(fā),涉及synchronized和Volatile修飾符庶溶,這2者都關(guān)系到CUP線程與內(nèi)存交互煮纵,java內(nèi)存模擬。不論是synchronized還是Volatile都是對下面3個保證性問題進行的操作偏螺,只是在某些情況下適用或者不適用行疏。

? ? ? ? 5.1.Java內(nèi)存模擬JMM(JMM定義了java虛擬機JVM在內(nèi)存中的工作方式)

JMM定義了多線程之間共享變量的可見性,一個線程對共享變量的寫入何時對另一個線程可見套像,以及如何在需要的時候?qū)蚕碜兞窟M行同步酿联。

? ? ? ? 5.2.并發(fā)編程必須的3個保證性問題:原子性問題,可見性問題,有序性問題

? ? ? ? ? *原子性:一個操作贞让,要么全部執(zhí)行并且執(zhí)行的過程不會被任何因素打斷周崭,要么就不執(zhí)行。

理解場景:A向B轉(zhuǎn)賬500元操作喳张;2個步驟续镇,賬戶A減去500元,賬戶B加上500元:A減500èB加500销部;過程中如果插入個賬戶B取走500元:A減500èB減500èB加500摸航。原本是2步,變?yōu)?步舅桩。轉(zhuǎn)賬結(jié)果就會發(fā)生錯誤酱虎。

只有簡單的讀取,儲存操作才是原子操作如I= 10(變量之間的互相賦值不是原子操作)江咳,如果要實現(xiàn)更大范圍操作的原子性逢净,可以通過synchronized,因為鎖能保證一個時刻只有一個線程執(zhí)行代碼塊歼指,從而不存在原子性問題爹土。

? ? ? ? *可見性:當(dāng)多個線程訪問同一個變量,一個線程修改了變量的值踩身,他線程能立即看到修改的值胀茵。

理解場景:CPU1下線程1執(zhí)行int I = 0 , I = 10,CPU2下線程2執(zhí)行 j = I ;假若線程1初始化? I = 0 后將 I = 10放入高速緩存中挟阻,但是沒有放入主存中琼娘,此時線程2執(zhí)行,從主存中讀取的仍然是? ? ? I = 0 ,j 就不等于10附鸽。線程1已經(jīng)改變了i的值脱拼,但是線程2沒有立即看到線程1修改的值,導(dǎo)致可見性問題坷备。

Synchronized的鎖能保證同一時間只有一個線程執(zhí)行代碼塊的同時熄浓,在釋放鎖之前會將對變量的修改刷新到主存當(dāng)中,因此避免上面場景中的問題省撑,進而解決可見性問題赌蔑。

? ? ? ? *有序性:程序執(zhí)行的順序按照代碼的先后順序執(zhí)行。

注意場景:指令重排序(InstructionReorder):處理器為了提高程序運行效率竟秫,可能會對輸入的代碼進行優(yōu)化娃惯,不保證各個語句的執(zhí)行先后順序同代碼順序一致,但是保證執(zhí)行結(jié)果一致(單線程一致肥败,多線程233)趾浅。

Synchronized的鎖能保證同一時間只有一個線程執(zhí)行代碼塊愕提,相當(dāng)于單線程執(zhí)行,自然保證有序性潮孽。

Volatile禁止進行指令重排序揪荣。

? ? ? ? ? 5.3.使用volatile必須具備以下2個條件:(2個條件就是保證操作是原子性操作筷黔,從而保證使用volatile關(guān)鍵字的程序在并發(fā)時能夠正確執(zhí)行往史。)

*對變量的寫操作不依賴于當(dāng)前值

*該變量沒有包含在具有其他變量的不變式中

? ? ? ? ? 5.4.synchronized關(guān)鍵字是防止多個線程同時執(zhí)行一段代碼,那么就會很影響程序執(zhí)行效率佛舱,而volatile關(guān)鍵字在某些情況下性能要優(yōu)于synchronized椎例,但是要注意volatile關(guān)鍵字是無法替代synchronized關(guān)鍵字的,因為volatile關(guān)鍵字無法保證操作的原子性请祖。

下周不是線程就是工廠模式订歪。。


對于生活理想肆捕,應(yīng)該像宗教徒對待宗教一樣充滿虔誠與熱情刷晋!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市慎陵,隨后出現(xiàn)的幾起案子眼虱,更是在濱河造成了極大的恐慌,老刑警劉巖席纽,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捏悬,死亡現(xiàn)場離奇詭異,居然都是意外死亡润梯,警方通過查閱死者的電腦和手機过牙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纺铭,“玉大人寇钉,你說我怎么就攤上這事〔芭猓” “怎么了扫倡?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長顿痪。 經(jīng)常有香客問我镊辕,道長,這世上最難降的妖魔是什么蚁袭? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任征懈,我火速辦了婚禮,結(jié)果婚禮上揩悄,老公的妹妹穿的比我還像新娘卖哎。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布亏娜。 她就那樣靜靜地躺著焕窝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪维贺。 梳的紋絲不亂的頭發(fā)上它掂,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機與錄音溯泣,去河邊找鬼虐秋。 笑死,一個胖子當(dāng)著我的面吹牛垃沦,可吹牛的內(nèi)容都是我干的客给。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼肢簿,長吁一口氣:“原來是場噩夢啊……” “哼靶剑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起池充,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤桩引,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后纵菌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阐污,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年咱圆,在試婚紗的時候發(fā)現(xiàn)自己被綠了笛辟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡序苏,死狀恐怖手幢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情忱详,我是刑警寧澤围来,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站匈睁,受9級特大地震影響监透,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜航唆,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一胀蛮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧糯钙,春花似錦粪狼、人聲如沸退腥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狡刘。三九已至,卻和暖如春困鸥,著一層夾襖步出監(jiān)牢的瞬間嗅蔬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工窝革, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留购城,地道東北人。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓虐译,卻偏偏與公主長得像,于是被迫代替她去往敵國和親吴趴。 傳聞我的和親對象是個殘疾皇子漆诽,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,933評論 2 355

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