单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
单例类只能有一个实例单例类必须自己创建自己的唯一实例单例类必须给所有其他对象提供这一实例顾名思义:不管你需不需要,一开始就建立这个单例对象。 优点:没有加锁,执行效率较高 缺点:类加载时就初始化,浪费内存 线程安全,在类加载的同时就已经创建好一个静态对象供系统使用,它基于 classloader 机制避免了多线程的同步问题
public class Singleton{ private static Singleton instance = new Singleton(); //私有化构造方法,该类就不会被实例化 private Singleton(){} public static Singleton getInstance(){ return instance; } }在你需要的时候,才建立这个单例对象 已加锁,线程安全。 优点:第一次调用才初始化,避免内存浪费 缺点:必须加锁才能保证单例,影响效率
public class Singleton{ private static Singleton instance; private Singleton(){}; public static synchronized Singleton getInstance(){ if(instance == null){ instance = new Singleton(); } return instance; } }JDK版本:1.5起 对象要加上volatile锁,禁止重排序优化。
public class Singleton{ private volatile static Singleton instance; private Singleton(){}; public static Singleton getInstance(){ if(instance == null){ synchronized(Singleton.class){ if(instance == null){ instance = new Singleton(); } } } return instance; } }