单类模式:
1. 静态常量饿汉式
public class Singleton {
priavte final static Singleton INSTANCE = new Singleton();
private Singleton() {}//类的构造方法一般是public的,因为这可以方便我们进行实类的创建。
// 严格说,这个构造函数不属于默认的构造函数,因为编译器自动生成的默认构造函数的访问权限与类的访问权限相同。
public static Singleton getInstance() {
return INSTANCE;
}
}
2.静态代码块饿汉式
public class Singleton {
private static Singleton ainstance;
static {
ainstance = new Singleton();
}
private Singleton(){}
public static Singleton getInstance(){
return ainstance;
}
}
以上都是在类的装载的同时去实例化对象。
3.双重检查
public class Singleton {
private static volatile Singleton singleton;
private Singleton(){}
public static Singleton getInstance(){
if(singleton == null) {//为下面同步锁减负,保证效率。存在至少两个线程同时通过这里(无法保证单类)
synchronized(this) { //有