码迷,mamicode.com
首页 > 编程语言 > 详细

Spring -11 -单例设计模式 -懒汉式/饿汉式(idea默认的)

时间:2018-12-13 16:38:15      阅读:301      评论:0      收藏:0      [点我收藏+]

标签:static   代码   程序   get   方法调用   添加   span   lazy   lis   

单例设计模式

  1. 作用: 在应用程序有保证最多只能有一个实例.
  2. 好处:

  2.1 提升运行效率.

  2.2 实现数据共享. 案例:application 对象

    1. 懒汉式

  3.1 对象只有被调用时才去创建.

  3.2  示例代码

       3.3由于添加了锁,所以导致效率低.

public class lazySingleton {  //懒汉式,单例模式!
    //由于对象需要被静态方法调用,把方法设置为static
    //由于对象是static,必须要设置访问权限修饰符为private ,
//如果是public 可以直接调用对象,不执行访问入口
    private static lazySingleton ourInstance ;
 /**
    *方法名和类名相同,无返回值.
    *其他类不能实例化这个类对象;对外提供访问入口
    */

    private lazySingleton() {
    }
/**

*实例方法,实例方法必须通过对象调用

*设置方法为静态方法
*@return 一个上面的static 对象

*/
    public static lazySingleton getInstance() {
    //添加逻辑如果实例化过,直接返回
        if(ourInstance==null){
         /*
         * 多线程访问下,可能出现if 同时成立的情况,添加锁;
          监控这个类下创建一个锁,每次只允许一个class进入;
         */
            synchronized (lazySingleton.class){
                if(ourInstance==null){ //双重验证
                    ourInstance =new lazySingleton();
                }
            }
        }
        return ourInstance;
    }
   
}

3.4 测试

  

        lazySingleton singleton = lazySingleton.getInstance();
        lazySingleton singleton1 = lazySingleton.getInstance();
        System.out.println(singleton==singleton1);
        System.out.println(singleton);
        System.out.println(singleton1);

--------------------
true
com.test.lazySingleton@60e53b93
com.test.lazySingleton@60e53b93

 

4.饿汉式  (IDEA 编译器默认的singleTon)
  解决了懒汉式中多线程访问可能出现同一个对象和效率低问题 ,多个实例共用一个对象!

public class hungerSingleton {
    private static hungerSingleton ourInstance = new hungerSingleton();

    public static hungerSingleton getInstance() {
        return ourInstance;
    }

    private hungerSingleton() {
    }
}

 

Spring -11 -单例设计模式 -懒汉式/饿汉式(idea默认的)

标签:static   代码   程序   get   方法调用   添加   span   lazy   lis   

原文地址:https://www.cnblogs.com/zhazhaacmer/p/10113952.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!