標(biāo)簽: 單例模式美侦、線程安全
我們都知道在ios中單例模式产舞,就是指在一個(gè)應(yīng)用程序的生命周期內(nèi)要保證只存在一個(gè)對(duì)象實(shí)例,那在多線程中是如何實(shí)現(xiàn)并保證線程安全的呢菠剩,咱們不妨先來(lái)看一下最終的實(shí)現(xiàn)效果:
public class Singleton {
private volatile Singleton instance = null
// 私有初始化方法
private Singleton() {}
public Singleton getInstance(){
if instance == null {
synchronized(Singleton.class) {
if instance == null {
instance = new Singleton()
}
}
}
return instance
}
}
其實(shí)要保證單例模式的線程安全易猫,需要注意兩個(gè)方面第一個(gè)就是保證對(duì)象在線程間的是可見的(可訪問(wèn)的),另一方面就是在保證初始化線程同步的時(shí)候是否有雙重檢測(cè)機(jī)制具壮。
ps: 這塊有時(shí)間我再具體詳細(xì)說(shuō)說(shuō)
名詞解釋:
volatile: 被volatile聲明的變量在多線程中具有可見性准颓。意思就是說(shuō),在多線程環(huán)境下棺妓,某個(gè)共享變量如果被其中一個(gè)線程給修改了攘已,其他線程能夠立即知道這個(gè)共享變量已經(jīng)被修改了,當(dāng)其他線程要讀取這個(gè)變量的時(shí)候怜跑,最終會(huì)去內(nèi)存中讀取样勃,而不是從自己的工作空間中讀取,想要深入研究的同學(xué)可以參考徹底搞懂volatile關(guān)鍵字
sychronized: 通過(guò)對(duì)一個(gè)對(duì)象進(jìn)行加鎖來(lái)保證線程同步性芬,可以參考一下這篇文章徹底搞懂synchronized(從偏向鎖到重量級(jí)鎖)