定义
单利模式(Singleton Pattern)理解起来比较简单,指的是保证在类使用过程中,通过类实例化的对象始终只有一个,如果该对象不存在则创建,若存在则使用已存在的,常见的案例是网站的访问统计,当用户访问网站时可以不必每次都往数据库存储,可以先通过单例缓存,然后一定时间再写入数据库。
代码理解
定义一个单例模式类
public class SingletonObject {
private static SingletonObject instance;
private SingletonObject(){};
public static SingletonObject getInstance(){
if (instance == null) {
instance = new SingletonObject();
System.out.println("create new instance");
}
return instance;
}
public void showMessage(){
System.out.println("hello world");
}
}
调用该对象
public class SingletonPattern {
public static void main(String[] args) {
SingletonObject singletonObject = SingletonObject.getInstance();
singletonObject.showMessage();
SingletonObject singletonObject1 = SingletonObject.getInstance();
singletonObject1.showMessage();
}
}
输出
create new instance
hello world
hello world
上面这个是线程不安全的,为了考虑线程安全,可以使用synchronized关键字
也就是
public static synchronized SingletonObject getInstance(){...}
或者使用以下方式
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton (){}
public static Singleton getInstance() {
return instance;
}
}
基于 classloader 机制避免了多线程的同步问题,instance 在类装载时就实例化