###Silngleton Pattern 类图 单例模式很是简单,基本没有什么类之间的关系,就不画图了,保证某个类生成的实例只有一个便可。java
###定义安全
###关于单例模式多线程
/* *“懒汉式”写法,即等要用了再去实例化实例对象,而不是应用一启动就实例化好放在容器中。 */ public class Singleton { private Singleton(); private static Singleton instance; public static getSingleton(){ if(instance==null){ instance = new Sinleton(); } return instance; } }
//双重检查锁的写法,由于使用了volatile关键字,须要jdk1.4以上 public class Singleton { private Singleton(); private static volatile Singleton instance; public static getSingleton(){ if(instance==null){ synchronized (Singleton.class){ if(instance==null){ instance = new Sinleton(); } } } return instance; } } /** * “饿汉式”的写法,由于没用到同步锁,因此后期效率最高。 **/ public class Singleton { private Singleton(); private static Singleton instance = new Singleton(); public static getSingleton(){ return instance; } }
其实所谓“懒汉式”与“饿汉式”的写法,只是区别在初始化的时机而已。“饿汉式”写法由jvm保证一应用启动时只实例化一个对象,因为多了一步实例化操做,应用启动会稍微慢点。而“懒汉式”因为是在应用启动后实例对象,因此要考虑多线程并发的状况。对于不是很大的应用,我的偏向于“饿汉式”,毕竟启动的时候多花点时间启动,换来后期运行的安全与效率也是值得的。谁没事每天重启生产上的程序啊(╯‵□′)╯︵┻━┻ 。并发