单例模式代码
/*
饿汉模式
*/
class SingletonDemo {
private final static SingletonDemo s = new SingletonDemo();
private SingletonDemo(){}
public static SingletonDemo getS(){
return s ;
}
}
/*
懒汉模式
*/
class SingletonDemo1{
private static SingletonDemo1 instance =null;
private SingletonDemo1(){}
public static SingletonDemo1 getS(){
if(instance==null){
instance = new SingletonDemo1();
}
return instance;
}
}
/**
* 单例模式,懒汉式,线程安全,多线程环境下效率不高
* synchronized 关键字,代表这个方法加锁,相当于不管哪一个线程(例如线程A),
* 运行到这个方法时,都要检查有没有其它线程B(或者C、 D等)正在用这个方法(或者该类的其他同步方法),
* 有的话要等正在使用synchronized方法的线程B(或者C 、D)运行完这个方法后再运行此线程A,
* 没有的话,锁定调用者,然后直接运行。
*/
class SingletonDemo2{
private static SingletonDemo2 sd =null;
private SingletonDemo2(){}
public static synchronized SingletonDemo2 getS(){
if(sd==null){
sd = new SingletonDemo2();
}
return sd;
}
}
/*
双重加锁 懒汉模式
*/
class SingletonDemo3{
private static SingletonDemo3 sd3 = null;
private SingletonDemo3(){}
public static SingletonDemo3 getSd3(){
if(sd3==null){
synchronized (SingletonDemo3.class){
if (sd3==null){
sd3 = new SingletonDemo3();
}
}
}
return sd3;
}
}