单例模式 不少都会写 面试的时候也常常问 因而乎顺手就写了一个面试
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; } }
原来单例也不简单啊,虽然如今本身手写很少 不少都用框架来代替了但本身设计一些底层编写时仍是会用到设计