zoukankan      html  css  js  c++  java
  • JAVA单例模式:懒汉式,饿汉式

    今天复习了一下java的单例模式,写了懒汉式和饿汉式的实现例子。代码如下:

    1.懒汉式单例

    package com.lf.shejimoshi;
    
    /**
     * @classDesc: 类描述:(懒汉式单例测试类) 
     * @author baobaolan
     * @createTime 2018年1月10日  
     * @version v1.0
     */
    public class SingletonTest {
        /**
         * @functionDesc: 功能描述:(测试懒汉式单例模式) 
         * @author baobaolan
         * @createTime 2018年1月10日  
         * @version v1.0
         */
        public static void main(String[] args) {
            Student s1 = Student.getStudent();
            Student s2 = Student.getStudent();
            System.out.println(s1==s2);
        }    
        
    }
    
    /**
     * @classDesc: 类描述:(学生类) 
     * @author baobaolan
     * @createTime 2018年1月10日  
     * @version v1.0
     */
    class Student{
        
        //定义全局变量
        private static Student student;
        
        //私有化构造函数
        private Student(){
            
        }
        
        /**
         * @functionDesc: 功能描述:(对外暴露方法) 
         * @author baobaolan
         * @createTime 2018年1月10日  
         * @version v1.0
         */
        public static Student getStudent(){
            if(student==null){
                //加上同步锁,保证线程安全
                synchronized(Student.class){
                    student = new Student();
                }
            }
            return student;
        }
    }

    2.饿汉式单例

    package com.lf.shejimoshi;
    
    /**
     * @classDesc: 类描述:(测试类) 
     * @author baobaolan
     * @createTime 2018年1月10日  
     * @version v1.0
     */
    public class Singleton2Test {
        
        public static void main(String[] args) {
        
            Teacher teacher1 = Teacher.getTeacher();
            Teacher teacher2 = Teacher.getTeacher();
            System.out.println(teacher1==teacher2);
            
        }
        
    }
    
    /**
     * @classDesc: 类描述:(饿汉式单例) 
     * @author baobaolan
     * @createTime 2018年1月10日  
     * @version v1.0
     */
    class Teacher{
        //类加载的时候初始化一次
        private static final Teacher teacher = new Teacher();
        //私有化构造函数
        private Teacher(){
            super();
        }
        /**
         * @functionDesc: 功能描述:(对外暴露的方法) 
         * @author baobaolan
         * @createTime 2018年1月10日  
         * @version v1.0
         */
        public static Teacher getTeacher(){
            return teacher;
        }
        
    }

    3.总结

      懒汉式线程不安全,需要加上同步锁,同步锁影响了程序执行效率。

          饿汉式天生线程安全,类加载的时候初始化一次对象,效率比懒汉式高。

  • 相关阅读:
    Linux基操:软件安装的方式:解压缩安装
    Linux基操:linux命令失效解决方法
    Linux基操:软件安装的方式:rpm,&&环境变量配置
    Linux基操:进程管理
    Linux基操:磁盘管理,扩展文件挂载问题
    Linux基操(Centos7):用户管理
    Linux基操:文件内容查看方式&&软链接硬链接(拓展)
    Linux基操:目录相关命令
    多测师肖sir_高级金牌讲师__面试和答案归纳
    多测师肖sir__高级金牌讲师 ___python中len函数
  • 原文地址:https://www.cnblogs.com/leifei/p/8258949.html
Copyright © 2011-2022 走看看