Java面試題之在多線程情況下,單例模式中懶漢和餓漢會有什麽問題呢?
阿新 • • 發佈:2019-03-02
餓漢模式 問題 之間 static 代碼 clas ava public 餓漢
懶漢模式和餓漢模式:
public class Demo { //private static Single single = new Single();//餓漢模式 private static Single single2 = null;//餓漢模式 public Demo() { if (single2 == null) {//1 single2 = new Single();//2 } } }
在多線程環境下,代碼1和代碼2之間,這裏會有線程安全問題,線程A和線程B同時到代碼1和代碼2之間,兩個線程同時創建兩個對象,這不符合單例模式;
解決方案:
可用雙重檢查鎖來實現
以下是雙重檢查鎖的代碼:
public class Demo { private static Single single2 = null;//餓漢模式 public Demo() { if (single2 == null) { synchronized (Demo.class) { if (single2 == null) { single2 = new Single(); } } } } }
Java面試題之在多線程情況下,單例模式中懶漢和餓漢會有什麽問題呢?