单例设计模式
保证一个类在内存中的对象唯一性。在整个软件运行期间,针对某一个类只存在一个实例
单例设计模式分为饿汉式和懒汉式
饿汉式
查看代码
class Single{
private Single(){} //私有化构造方法。
private static Single s = new Single(); //创建私有并静态的本类对象。
public static Single getInstance(){ //定义公有并静态的方法,返回该对象。
return s;
}
}
懒汉式
查看代码
public class Single{
private Single(){} //私有化构造方法。
private static Single s = null;
public static synchronized Single getInstance(){
if(s==null){
s = new Singleton();
}
return s;
}
}
为了效率问题,通过双重判断的形式解决。
查看代码
class Single{
private Single(){} //私有化构造方法。
private static Single s = null;
public static Single getInstance(){ //锁是谁?字节码文件对象;
if(s == null){
synchronized(Single.class){
if(s == null)
s = new Single();
}
}
return s;
}
}
饿汉式和懒汉式的区别
懒汉式是延时加载,他在类调用获得实例方法时创建实例,而饿汉式在类加载时候就会创建。
饿汉式是线程安全的,在类创建的同时就创建好一个静态的对象供系统使用,以后不在改变
不加synchronized懒汉是不安全的,如不加上synchronized则会导致对对象的访问不是线程安全的,多线程访问时会创建多个实例,加上又会影响效率,可以用双重判断形式解决
推荐使用饿汉式,
内部类方式:
public class Single {
private static class LazyLoader{
private static final Single instance = new Single ();
}
private Single(){}
public static Single getInstance(){
return LazyLoader.instance;
}
}