话不多说,贴代码 网上有许多实例,这是我在本地自己敲的
package test;
public class Singleton {
/*
//饿汉式单例模式实现
private Singleton(){}
private static Singleton instance = new Singleton();
public static Singleton getInstance(){
return instance;
}*/
/*
//懒汉式单例实现 当线程A B同一瞬间进入get方法 首先都为空 A进入执行完后 B执行也判断为空 多次new 不唯一 需双重判断(双重检查锁定)
private static Singleton instance = null;
private Singleton(){}
public static Singleton getInstance(){
if(instance==null){
synchronized (Singleton.class) {
instance =new Singleton();
}
}
return instance;
}*/
/*//懒汉式双重检查锁定
private volatile static Singleton instance = null;//不缓存 每次取值刷新
private Singleton(){}
public static Singleton getInstance(){
if(instance==null){
synchronized(Singleton.class){
if(instance==null){
instance = new Singleton();
}
}
}
return instance;
}*/
//IoDH实现单例模式
private Singleton(){}
private static class HolderClassr{
private static final Singleton instance =new Singleton();
}
public static Singleton getInstance(){
return HolderClassr.instance;
}
public static void main(String[] args){
Singleton s1,s2;
s1 = Singleton.getInstance();
s2 = Singleton.getInstance();
System.out.println(s1==s2);
}
}