我覺得這里講的有問題
我覺得這里線程B已經(jīng)把修改的值寫入主內(nèi)存了,那么線程A執(zhí)行number+1 時,number會從主內(nèi)存中讀取到6,執(zhí)行結(jié)果是正確的。
?錯誤的情況應(yīng)該是:
1. 線程A讀取number的值,并且+1?
2. 線程B讀取number的值,并且+1?
3. 線程B寫入結(jié)果6到主內(nèi)存?
4. 關(guān)鍵點,此時線程A寫入計算結(jié)果6, 給volatile修飾的變量賦值,只是會把值刷新到主內(nèi)存。因此只加了一次。?
?不知道我的理解對不對?請大神指教
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;
? ? }
}
按老師的講解的例子 instance 已經(jīng)緩存了,如何保證單例?