• 单例设计模式的回顾。。。。


    一、摘要

      在我们开发、或者查看源码的过程中,或多或少都会接触到一些设计模式,现在回顾的是最简单的单例设计模式

      所谓单例设计模式指的就是在程序中我们指定的类的对象只有一个。

      在单例设计模式中主要分两种:懒汉式以及恶汉式

      恶汉式:没有线程安全问题

      懒汉式:存在线程安全问题,但可以使用同步代码块进行加锁保证

    二、在单线程情况下的恶汉式以及懒汉式代码案例:

      

    public class SimpleDemo1 {
        /**
         * 恶汉式
         */
        private static SimpleDemo1 sd=new SimpleDemo1();//在多线程情况安全,但不建议这么做,浪费内存
        private SimpleDemo1(){}
        public static SimpleDemo1 getInstance(){
                return sd;
        }
    
    }
    
    /**
     * 懒汉式
     */
    class SimpleDemo2{
        private static SimpleDemo2 sd=null;
        public SimpleDemo2(){}
        public static SimpleDemo2 getInstance(){
            if(sd ==null){          //多线程情况下这里可能会产生线程安全问题
                sd= new SimpleDemo2();
            }
            return sd;
        }
    }
    

     三、在多线程的情况下对懒汉式单例进行优化:

      

    /**
     * 多线程情况下优化懒汉式
     */
    class SimpleDemo2{
        private static SimpleDemo2 sd=null;
        public SimpleDemo2(){}
        public static SimpleDemo2 getInstance(){
            synchronized (SimpleDemo2.class){    //此处线程会出现等待的情况,进一步代码优化参考下面
                if(sd ==null){
                    sd= new SimpleDemo2();
                }
                return sd;
            }
        }
    }


    /**
     * 多线程情况下优化懒汉式:在同步前进行一次判断,能够有效的节省了资源
     */
    class SimpleDemo2{
        private static SimpleDemo2 sd=null;
        public SimpleDemo2(){}
        public static SimpleDemo2 getInstance(){
        if(sd == null){                //在此处进行判断,对对象为null才去加锁,这样效率会更高    synchronized (SimpleDemo2.class){        if(sd ==null){    sd= new SimpleDemo2();    }   }
        }
        return sd; } }

    综上:在多线程的情况,需要考虑到线程的安全问题,可以采取最下面的一种方法,在同步之前最好做一次判断,节省了资源


  • 相关阅读:
    Centos 6 安装python2.7.6
    更新centos系统的python版本
    centos中wget的使用方法
    开启apahce的mod_speling.so模块,让使用apahce http服务器不再有大小写烦恼
    开启server-status失败
    TCP三次握手与四次挥手
    GitHub入门和项目托管
    使用javac,手动编译一个java文件的方法
    《TomCat与Java Web开发技术详解》(第二版) 第四章节的学习总结--常用Servlet API
    《TomCat与Java Web开发技术详解》(第二版) 第三章节的学习总结--利用Context元素来自定义web应用的存储位置
  • 原文地址:https://www.cnblogs.com/cczequn/p/8605947.html
Copyright © 2020-2023  润新知