由于多線(xiàn)程的情況,系統(tǒng)會(huì)根據(jù)代碼自動(dòng)調(diào)用“指令重排”機(jī)制膀捷,但是正是由于這個(gè)機(jī)制,導(dǎo)致了普通的雙端檢鎖不能很好的達(dá)到線(xiàn)程安全的效果秀仲,所以此時(shí)需要利用Volatile的特性神僵。
核心就是利用Volatile關(guān)鍵字防止“指令重排”保礼,再利用雙端檢鎖來(lái)達(dá)到線(xiàn)程安全责语。
核心代碼如下:
public class Demo {
// 創(chuàng)建Demo對(duì)象,并為其添加“Volatile”關(guān)鍵字
private static volatile Demo instance = null;
public static Demo getInstance() {
// 雙端檢鎖第一步
if (instance == null) {
// 同步代碼塊
synchronized (Demo.class) {
// 雙端檢鎖第二步
if (instance == null) {
instance = new Demo();
}
}
}
return instance;
}
}