全局只需要一个实例,如Logger日志对象,连接池,线程池,缓存等。
饿汉式: 类加载时候就创建实例,线程安全,但是会浪费内存空间(对象实例很大的时候,如果小当然不在乎),有可能一直用不到该实例。
/** * 饿汉单例 */ public class EHSingleton { private static EHSingleton singleton = new EHSingleton(); private EHSingleton(){ } public static EHSingleton getSingleton(){ return singleton; } public void show(){ System.out.println("this is 饿汉式"); } }
懒汉式: 需要的时候再加载,不过存在多线程安全问题,所以需要双检锁(两个null判断)
/** * 懒汉单例 */ public class LHSingleton { private static volatile LHSingleton singleton ; private LHSingleton(){ } public static LHSingleton getSingleton(){ if(null == singleton){ synchronized (LHSingleton.class){ if(null == singleton){ singleton = new LHSingleton(); } } } return singleton; } public void show(){ System.out.println("this is 懒汉式"); } }
1261

被折叠的 条评论
为什么被折叠?



