通過對一個單列模式的應用場景,進行解析
1.普通的單列模式:
在多線程的情況下,就會出現了問題。
很顯然,出現了問題。在多線程的情況下,需要進行改進了。
2.通過Sysnchronized進行解決。
使用這個方法,可以解決。但是會有個問題,當然,要千萬級別纔會出現。就是重排序問題。
3.解決方案,使用Volation
//懶漢模式
private static volatile VolatileDemo4 instance = null;
private VolatileDemo4() {
System.out.println("創建單列模式" + Thread.currentThread().getName());
}
//DCL(Double check Lock 雙端鎖機制)
public static VolatileDemo4 getInstance() {
if (instance == null) {
synchronized (VolatileDemo4.class) {
if (instance == null) {
instance = new VolatileDemo4();
}
}
}
return instance;
}
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
new Thread(() -> {
VolatileDemo4.getInstance();
}).start();
}
}
案例代碼地址在github:
https://github.com/virtuousOne/JavaBase