}在類載入的時候就初始化了例項物件,因此在多執行緒的情況下是執行緒安全的。
public class singleton
private singleton() {}
public static singleton getinstance()
}
將類的例項化放在了靜態**塊中,保證只會初始化一次,同樣執行緒安全。
public class singleton
public static singleton getinstance()
return instance;}}
多執行緒場景下禁止使用,因為可能會產生多個物件,執行緒不安全。
public class singleton
public static synchronized singleton getinstance()
return instance;}}
在getinstance()方法上加了synchronized關鍵字。保證了多執行緒情況下的執行緒安全。
}}這種情況下雙重校驗,首先判斷instance是否為null,不用每次都獲取鎖,減少了獲取鎖的次數,效率比較高。
有一點格外要注意,volatile關鍵字的使用。為什麼要用volatile關鍵字進行修飾,因為我們知道volatile關鍵字可以保證禁止指令重排。對於instance = new singleton()這行**它可以分解為三個步驟:
1 分配記憶體
2 初始化物件
3 將instance指向剛剛分配的位址
如果不使用volatile關鍵字進行修飾,可能會出現重排序,例如從1-2-3 排序為1-3-2。假如此時有2個執行緒a,b。執行緒a在執行instance = new singleton()這行**時,b執行緒進來,而此時a執行完了1和3,沒有執行2,此時b執行緒判斷instance不為null 直接返回乙個未初始化的物件,就會出現問題。
計算 某一天據今天有多少天
int intervalsincenow nsstring thedate nsdateformatter date nsdateformatter alloc init date setdateformat yyyy mm dd 傳入格式 為 2017 09 18 nsdate d date da...
今天是不錯的一天
今天是不錯的一天 今天我和我哥還有我上海的朋友聊了很多.大都聊的是生活,未來,工作,理財的問題 或許這些都是我這個年齡段的人關注的吧,今天的聊天讓我覺得我進入了這個階段,讓我覺得,恩,是這樣的,我進入人生的這個階段了.鄒和我說了許多關於理財的東西,哥和我說了很多和工作,前途,健康方面的東西 我想,在...
今天一天幹的活
截止到目前的bug和未完成的功能 1.球比牆大,導致會像糖葫蘆一樣穿過牆 再增加球每條邊中點的檢測,感覺有點 頭痛醫頭,腳痛醫腳 但是用專門的碰撞檢測演算法 又似乎沒這個必要,先這麼做吧 2.牆的結構要改變 沒有改變原來的牆的結構,而是把要重新貼圖的位置記下來了,現在看來效果還不錯,原來 的 完全不...