单例模式
简单点说,就是一个应用程序中,某个类的实例对象只有一个,你没有办法去new,因为构造器是被private修饰的,一般通过getInstance()的方法来获取它们的实例。getInstance()的返回值是一个对象的引用,并不是一个新的实例,所以不要错误的理解成多个对象。
单例模式实现起来也很容易,但是大量使用单例模式可能造成内存泄露,因为单例对象一旦创建,就会保存在堆中,垃圾回收器也无法清除这个对象的引用,因为Hot spot本身是采用“引用链可达法”来进行是否进行回收的,而单例这样单独的存在会造成一个强引用,而无法被清除。这样对象堆积下去,就会发生out of memory!
单例模式实现方法一般有三种:懒汉式单例、饿汉式单例、登记式单例。
下面直接写代码:懒汉式的线程安全的单例
//懒汉 线程安全 单例 public class Singleton { private static Singleton singleton; private Singleton() { } public static Synchronized Singleton getInstance() { if (singleton == null) { singleton = new Singleton(); } return singleton; } }