package com.dding.pmsmigrateServer.web; public class Singlon { /** * 1、饿汉模式。直接定义为static final的域。仅在类加载时就定义且赋值。之后只能 * 通过公开的接口来获取该instance实例。 * * 优点:线程安全。因为在类加载时候就注入了。 * 缺点:无论使不使用该类。都会去实例话那个唯一的对象。因此造成了内存的无端损耗 */ /*private static final Singlon instance = new Singlon(); private Singlon(){}; public static Singlon getInstance(){ return instance; }*/ /** * 2、饿汉模式。把instance的初始化放在静态代码块里面。和第一种方法非常相似。优缺点也一样。 */ /*private static Singlon instance;//加static保证类唯一 static{ instance = new Singlon(); } private Singlon(){ }; public static Singlon getInstance(){ return instance; }*/ /** * 3、懒汉模式(线程不安全) * 优点:需要用到instance时候再去初始化,不会造成内存的无用消耗 * 缺点:没有考虑线程安全,如果在多线程的环境下,会出现创建多个instance实例的问题 */ /*private static Singlon instance; private Singlon(){}; public static Singlon getInstance(){ if (null == instance){ instance = new Singlon(); } return instance; }*/ /** * 4、懒汉模式(线程安全) * 优点:延迟加载,使用的时候再去初始化instance。且加了锁保证同一时间只有一个线程能去调用 * getInstance()方法。保证多线程情况下的安全性 * 缺点:多线程环境下效率太低了。每一次去获取实例时都要做加锁,也就是同步处理。就会造成线程阻塞。 * 原本初始化instance只有一次。但是这么写导致了每次都要去加锁,判断有没有锁。不好 */ /*private static Singlon instance; private Singlon(){}; public synchronized static Singlon getInstance(){ if (null == instance){ instance = new Singlon(); } return instance; }*/ /** * 5、懒汉模式(改良版线程安全) * 优点:延迟加载,保证线程安全性。且只在初始化instance的时候加锁。也就是只在第一次初始化的时候加锁来 * 保证安全。之后的多线程获取实例,都不需要进行同步处理。极大的提高了效率 */ /*private static Singlon instance; private Singlon(){}; public static Singlon getInstance(){ if (null == instance){ synchronized (Singlon.class){ if (null == instance){ instance = new Singlon(); } } } return instance; }*/ /** * 6、枚举类型 */ /** * 使用枚举的单例模式 * jvm保证enum不能被反射并且构造器方法只执行一次。 */ /*public class EnumSingleton{ private EnumSingleton(){} public static EnumSingleton getInstance(){ return Singleton.INSTANCE.getInstance(); } private static enum Singleton{ INSTANCE; private EnumSingleton singleton; //JVM会保证此方法绝对只调用一次 private Singleton(){ singleton = new EnumSingleton(); } public EnumSingleton getInstance(){ return singleton; } } }*/ }