JAVA 单例的两种模式
/** * 单例模式:保证一个java的类只有一个实例 * 可以通过将构造方法声明成私有的,在类内部创建实例 * 对外提供一个公用方法来获取这个实例 * 饱汉模式:一般认为饱汉模式安全。每次申请一次内存,宁撑死不挨饿 * 饥汉模式:注意饥汉模式下的公用方法必须是线程同步的,原因???? * 其他模式:定义一个类,构造方法为private,所有方法为static的 */public class Singleton {/**1.饱汉模式 * 每次都要生成一次对象,所以饱了。这样总的类对象不是多个了吗? * 是指每次调用这个类时都要new一次吗?可是内存不是只有一份吗? */private Singleton(){//构造方法是私有的}//实例化代码放在静态代码块里可以提高程序执行效率,但可能更占空间private final static Singleton instance = new Singleton();//提供公用方法,用于获取类内部的类实例public static Singleton getInstance(){return instance;}/**2.饥汉模式,注意其getInstance方法是synchronized的 * 使用getInstance判断,当实例为空时才生成 * 不用每次生成对象,第一次使用生成实例 * 即刚开始类实例对象为null,还未申请内存。在getInstance里针对类实例进行判断 * 为空,即饥饿状态,需要创建后返回,否则直接返回 * @author wybin */private Singleton(){}private static instance = null;//先声明一个类本身实例成员。初始化为空。先不申请内存public static synchronized Singleton getInstance(){if(instance == null) instance = new Singleton();return instance;}/**3.其他模式(自己猜的) * 构造方法为private * 其他方法全部为static */private Singleton(){}private static instance = null;private static Singleton getInstance(){if(instance == null) instance = new Singleton();return instance; }}