单例设计模式:
实例:张三开车去东北,经理只想让他中途开这同一辆车去。
在代码中车只有一辆,不管你怎么new,只有这一辆车。
懒汉式:(项目中建议使用)
class Car{
private Car(){}//构造函数私有话
private Car car=new Car();//必须提供一个对象
public static Car getCar(){//提供一个可以返回对象的方法,必须是静态的,这个对象是不能new的
return car;
}
}
饿汉式:(在面试中常提到,涉及到多线程中的问题) 写一个延迟加载的单例设计模式
①直接使用同步函数解决多线程问题,效率稍低。
class Single
{
private Single(){}//构造函数私有话
private Single single=null;
public static synchronized Single getSingle(){
if(single==null)
single=new Single();
return single;
}
}
②使用双重判断加同步代码块解决,效率稍高。
class Single
{
private Single(){}//构造函数私有话
private Single single=null;
public static Single getSingle(){
if(single==null){
synchronized(Single.class){//加同步代码块时所使用的是哪一个锁?该类所属字节码的文件对象。
if(single==null)
single=new Single();
}
}
return single;
}
}
懒汉式和饿汉式的区别:懒汉式的特点在于,实例的延迟加载。
延迟加载时会出现安全问题,可以使用同步解决。同步函数和同步代码块都可以,同步函数效率稍低。使用同步代码块的双重判断可以解决效率问题。
加同步代码块时所使用的是哪一个锁?该类所属字节码的文件对象。