java基础的零散总结(2)--单例设计模式

来源:互联网 发布:泰迪熊代挂软件官网 编辑:程序博客网 时间:2024/05/21 06:53

单例设计模式:

实例:张三开车去东北,经理只想让他中途开这同一辆车去。

在代码中车只有一辆,不管你怎么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;
 }
}

 

懒汉式和饿汉式的区别:懒汉式的特点在于,实例的延迟加载。

延迟加载时会出现安全问题,可以使用同步解决。同步函数和同步代码块都可以,同步函数效率稍低。使用同步代码块的双重判断可以解决效率问题。

加同步代码块时所使用的是哪一个锁?该类所属字节码的文件对象。