zoukankan      html  css  js  c++  java
  • Spring -11 -单例设计模式 -懒汉式/饿汉式(idea默认的)

    单例设计模式

    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() {
        }
    }
  • 相关阅读:
    hdu1203I NEED A OFFER!(01背包)
    poj3984迷宫问题(dfs+stack)
    hdu1422重温世界杯(动态规划,最长子序列)
    hdu1231最大连续子序列(动态规划)
    cf#514B. Forgery(暴力)
    uvaoj455Periodic Strings(枚举)
    uvaoj1225Digit Counting(暴力)
    uvaoj1586Molar mass(暴力)
    uvaoj1585Score(暴力)
    使用哈希值和&和2^n数组生成索引值的原理
  • 原文地址:https://www.cnblogs.com/zhazhaacmer/p/10113952.html
Copyright © 2011-2022 走看看