/**
*
* 单例模式:饿汉式
*/
class Demo{
private static Demo d=new Demo();
private Demo(){}
public static Demo getInstance(){
return d;
}
}
/**
*
* 懒汉式:在多线程情况下会产生多例的情况,故采用双重校验以提高synchronized效率
*
*/
class Demo1{
private static Demo1 d;
private Demo1(){}
public static Demo1 getInstance(){
if(d==null){
synchronized (Demo1.class) {
if(d==null){
d=new Demo1();
}
}
}
return d;
}
}
/**
*
* 使用静态内部类实现单例模式
* 然而在序列化对象,使用默认的方式运行得到的结果还是多例的。
* 解决方法就是在反序列化中使用readResolve()方法
*/
class Demo2{
private Demo2(){}
private static class Inner{
private static Demo2 d=new Demo2();
}
public static Demo2 getInstance(){
return Inner.d;
}
}
/**
*
* 使用静态代码块
*
*/
class Demo3{
private Demo3(){}
private static Demo3 d=null;
static{
d=new Demo3();
}
public static Demo3 getInstance(){
return d;
}
}
/**
* 使用枚举实现单例
*
*/
enum Demo4{
INSTANCE;
}
单例模式
最新推荐文章于 2021-11-04 11:12:52 发布