单态模式:
确保一个类只有一个实例,并提供一个全局访问点
毫无疑问,单态模式是java编程过程中最常见也是最常用的模式;其核心就是一个类整个生命周期中就只有一个实例,无论是单线程还是多线程都是只有一个;
在实现方式上有两种:饥汉和饱汉(其实就是初始化的先后顺序):
饥汉式:
public class SingletonOther {
private static SingletonOther instance;
private SingletonOther() {
}
public SingletonOther getInstance(){
if(instance == null){
instance = new SingletonOther();
}
return instance;
}
}
饱汉式:
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {
}
public Singleton getInstance()
{
return instance;
}
}
然而,在多线程情况下饥汉实例化过程中,由于CPU时钟轮训工作时那就有可能出现多个实例;在这个时候我们可以通过加锁进保证整个创建得过程的唯一性:
public class SingletonPro {
private volatile static SingletonPro instance;
private SingletonPro(){
}
public SingletonPro getInstance()
{
if(instance == null){
synchronized (Singleton.class) {
if(instance == null){
instance = new SingletonPro();
}
}
}
return instance;
}
}