單例模式 不少都會寫 面試的時候也常常問 因而乎順手就寫了一個面試
public class Singleton { private static Singleton singleton = new Singleton(); private Singleton(){} public static Singleton getSingleton(){ return singleton; } }
因爲這種啓動加載,爲了減少負載須要延遲加載 因而有了安全
public class Singleton { private static Singleton singleton = null; private Singleton(){} public static Singleton getSingleton(){ if(singleton == null) singleton = new Singleton(); return singleton; } }
確實延遲加載了 但若是多線程的話 是否是可能出現多個了呢多線程
因而咱們考慮線程安全 進行加鎖框架
public class Singleton { private static Singleton singleton = null; private Singleton() { } public static Singleton getSingleton() { synchronized (Singleton.class) { if (singleton == null) singleton = new Singleton(); } return singleton; } }
但這樣一想每次都要來進行鎖判斷 而單例一旦建立了後面就存在了不用進null判斷了 這樣效率是否是還能夠提升一點線程
public class Singleton { private static Singleton singleton = null; private Singleton() { } public static Singleton getSingleton() { if (singleton == null) synchronized (Singleton.class) { if (singleton == null) singleton = new Singleton(); } return singleton; } }
原來單例也不簡單啊,雖然如今本身手寫很少 不少都用框架來代替了但本身設計一些底層編寫時仍是會用到設計