单例模式的各种写法
程序员文章站
2022-07-13 23:47:04
...
懒汉
public class Sin { //用的时候构建 lazy
private static Sin sin;
private Sin(){} //其他对象不能创建对象
public static synchronized Sin getSin(){
if(sin == null){
sin = new Sin();
}
return sin;
}
}
恶汉
public class Sin {
public static Sin sin = new Sin();
private Sin(){};
Sin getSin(){
return sin;
}
}
懒汉模式double-check
public class Sin {
private static Sin sin;
private Sin(){} //其他对象不能创建对象
public static Sin getSin(){
//第一个线程获取了单例的实例对象
//后面的线程不需要进入同步代码块了
if(sin == null){
//使用单例的字节码文件对象,且只能用这个锁
synchronized (Sin.class){
if (sin == null)
sin = new Sin();
}
}
return sin;
}
}
静态内部类[推荐用]
public class Sin {
private static class SinHolder{ //初始化一个类
public static final Sin SIN = new Sin();
}
private Sin(){};
// JVM帮助我们保证了线程的安全性,在类进行初始化时,别的线程是无法进入的。
public static Sin getSin(){
return SinHolder.SIN;
}
}
上一篇: 单例模式的各种写法
下一篇: Aspectj切入点语法