单例模式
单例模式非常常用,从字面意思就可以看出。是单个实例的意思。单例模式分两种饿汉式和懒汉式。
1、饿汉式:
public class SingleClass {
private static SingleClass instance = new SingleClass();
public static SingleClass getInstance() {
return instance;
}
}
饿汉式是线程安全的,毋庸置疑。
2、懒汉式:
2.1这种写法只适合单线程操作,如果是多线程就会出现线程不安全。
public class SingleClass{
private static SingleClass instance = null;
public static synchronized SingleClass getInstance(){
if(instance == null){
instance = new SingleClass();
}
return instance;
}
}
2.2在上面的代码中添加synchronized同步后线程就是安全的。
public class SingleClass {
private static SingleClass instance = null;
public static synchronized SingleClass getInstance() {
if (instance == null) {
instance = new SingleClass();
}
return instance;
}
}
2.3静态内部类
public class SingleClass {
static class SingleClassHolder{
static SingleClass instance = new SingleClass();
}
public static SingleClass getInstance(){
return SingleClassHolder.instance;
}
}
2.4双重校验,不推荐这种写法。看上去都比较麻烦
public class SingleClass {
private volatile static SingleClass instance;
public static SingleClass getInstance() {
if (instance == null) {
synchronized (SingleClass.class) {
if (instance == null) {
instance = new SingleClass();
}
}
}
return instance;
}
}