多线程的单例设计模式:保证某个类中内存中只有一个对象 (1)饿汉式: class Single { private Single(){}//将构造函数私有化,不让别的类建立该类对象 private static final Single s=new Single();//自己建立一个对象 public static Single getInstance(){//提供一个公共访问方式 return s; } } (2)懒汉式: class Single{ private Single(){} private static Single s; public static Single getInstance(){ if(s==null) s=new Single(); return s; } } 饿汉式和懒汉式的区别: ** 饿汉式是类一加载进内存就创建好了对象; 懒汉式则是类加载进内存的时候,对象还没有存在,只有调用了getInstance()方法时,对象才开始创建。 ** 懒汉式是延迟加载,如果多个线程同时操作懒汉式时就有可能出现线程安全问题,解决线程安全问题 可以加同步来解决。但是加了同步之后,每一次都要比较锁,效率就变慢了, 所以可以加双重判断来提高程序效率。 如将上述懒汉式的Instance函数改成同步: public static Single getInstance(){ if(s==null){ synchronized(Single.class){ if(s==null) s=new Single(); } } return s; }
|