单例模式——饿汉模式和懒汉模式

 1 /**
 2  * 单例模式Singleton
 3  * 应用场合:有些对象只需要一个就足够了.
 4  * 作用:保证整个应用程序中某个实例只有一个.
 5  * 类型:饿汉模式.
 6  */
 7 public class Singleton {
 8     //1.将构造方法私有化,不允许外部直接创建对象
 9     private Singleton(){
10         
11     } 
12     
13     //2.创建类的唯一实例   使用private static修饰符
14     private static Singleton instance = new Singleton();
15     
16     //3.提供一个用于获取实例的方法  使用public  static修饰符    (面向对象的封装性要求控制访问,不允许其他类直接访问本类的成员变量(私有化))
17     public static Singleton getInstance(){
18         return instance;
19     }
20 }
 1 /*
 2  * 对象是方法被调用时,才初始化,也叫做对象的延时加载。称为:懒汉式
 3  * Single类进内存,对象还没有存在,只有调用getInstance方法,才建立对象。
 4  */
 5 class Single1{
 6     private Single1(){}
 7     private static Single1 s=null;
 8     /*
 9      *此处可以加一个synchronized(同步),使只有一个线程可以进入该方法,避免错乱。
10 * 但是每次只有一个线程可以进入导致该方法效率低。
11     public static synchronized Single1 getInstance(){ 
12         if(s==null)
13             s=new Single1();
14         return s;
15     }
16     */
17     
18     /*以下方法更为高效*/
19     public static Single1 getInstance(){
20         if(s==null){
21             synchronized(Single1.class) {
22                 if(s==null)
23                     s=new Single1();
24             }
25         }    
26         return s;
27     }
28 }

饿汉模式和懒汉模式的区别:

饿汉模式的特点是加载类时比较慢,但运行时获取对象的速度比较快,线程安全

懒汉模式的特点是加载类时比较快,但运行时获取对象的速度比较慢,线程不安全

原文地址:https://www.cnblogs.com/lezhifang/p/6735938.html