单例之饿汉模式和懒汉模式
饿汉模式
public class Singleton { /** * 创建对象 */ private final static Singleton singleton = new Singleton(); /** * 私有的构造方法,禁止其他调用 */ private Singleton(){}; /** * 对外开放的获取对象的方法 */ public static Singleton getInstance (){ return singleton; } /** *优点:这种写法比较简单,就是在类装载的时候就完成实例化。避免了线程同步问题。 *缺点:在类装载的时候就完成实例化,没有达到Lazy Loading的效果。如果从始至终从未使用过这个实例,则会造成内存的浪费。 */ }
懒汉模式
package com.wanshi.Danli; public class Singleton2 { private static volatile Singleton2 singleton2; private Singleton2() {} public static Singleton2 getInstance() { if (singleton2 == null) { synchronized (Singleton2.class) { if (singleton2 == null) { singleton2 = new Singleton2(); } } } return singleton2; /** * Double-Check概念对于多线程开发者来说不会陌生,如代码中所示, * 我们进行了两次if (singleton == null)检查,这样就可以保证线程安全了。 * 这样,实例化代码只用执行一次,后面再次访问时,判断if (singleton == null),直接return实例化对象。 * 优点:线程安全;延迟加载;效率较高。 */ } }