保证一个类仅有一个实例,并提供一个访问它的全局访问点。
保证一个类只有一个实例并且这个实例易于被访问。
懒汉式是时间换空间,也就是每次获取实例都会进行判断,看是否需要创建实例,浪费判断的时间。当然,如果一直没有人使用的话,那就不会创建实例,则节约内存空间。
public class Singleton { private static Singleton instance; //让构造函数为 private,这样该类就不会被实例化 private SingleObject(){} //获取唯一可用的对象 public static Singleton getInstance(){ if (instance == null){ instance = new Singleton(); } } }
synchronize加锁保证线程安全,但是加锁会影响效率。
public class Singleton { private static Singleton instance; //让构造函数为 private,这样该类就不会被实例化 private SingleObject(){} //获取唯一可用的对象 public static synchronize Singleton getInstance(){ if (instance == null){ instance = new Singleton(); } } }
饿汉式是空间换时间,当类装载的时候就会创建类实例,不管你用不用,先创建出来,然后每次调用的时候,就不需要再判断了,节省了运行时间。并且类加载只会创建一遍,解决了线程不安全的问题。
public class Singleton { //让构造函数为 private,这样该类就不会被实例化 private Singleton (){} //静态初始化对象实例 private static Singleton instance = new Singleton(); //获取唯一可用的对象 public static Singleton getInstance() { return instance; } }
原文:https://www.cnblogs.com/6970-9192/p/11449216.html