俄汉式(不能懒加载)
public class Sinleton {
private Sinleton() {
}
private static Sinleton instance = new Sinleton();
public static Sinleton getInstance(){
return instance;
}
}
懒汉式(可以懒加载 )
public class Sinleton {
private Sinleton() {
}
private static Sinleton instance = null;
public synchronized static Sinleton getInstance(){
if(instance==null)
instance = new Sinleton();
return instance;
}
}
内部类法(可以懒加载)
public class SingletonDemo1 {
private static class InnerClass{
public static SingletonDemo1 instance = new SingletonDemo1();
}
public static SingletonDemo1 get(){
return InnerClass.instance;
}
}
枚举类法
public enum SingletonDemo2 {
INSTANCE;
}
双重检测锁法(可以懒加载,由于jvm指令重排机制,故不建议使用)
public class SingletonDemo {
private SingletonDemo() {
}
private static SingletonDemo instance;
public static SingletonDemo get(){
SingletonDemo s;
if(instance==null){
synchronized (SingletonDemo.class){
s = instance;
if(s==null){
synchronized (SingletonDemo.class){
s = new SingletonDemo();
}
instance = s;
}
}
}
return instance;
}
}