關於單例模式的想法-volatile
阿新 • • 發佈:2017-09-07
get 變量 共享 zed span () == ati urn
今天看著一個多線程並發用到的關鍵字:volatile,看了不少資料發現這個是一個共享的直接寫入內存使用的關鍵字修飾變量,用來修飾類變量或者類靜態變量,所以有了一個關於單利模式的想法,我們都知道的單例模式的一個寫法是:
class Singleton{ private static Singleton instance = null; private Singleton() { } public static Singleton getInstance() { if(instance==null) { synchronized (Singleton.class) { if(instance==null) instance = new Singleton(); } } return instance; } }
當然單例模式還有其他的寫法,我要說的是將關鍵字volatile加在變量instance上:
class Singleton{
private volatile static Singleton instance = null;
private Singleton() {
}
public static Singleton getInstance() {
if(instance==null) {
synchronized (Singleton.class) {
if(instance==null)
instance = new Singleton();
}
}
return instance;
}
}
因為用votalite修飾的變量,在修改時是直接將變量值寫進物理內存中去的,不會寫入緩存中去,這樣,單例模式就更加的,,,,好了
關於單例模式的想法-volatile