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.总结

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

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

  • 相关阅读:
    docker tcp配置
    PostgreSQL 数据库备份
    docker 几种磁盘卷挂载方式的区别
    MAT
    OkHttp
    HashMap 在 Java1.7 与 1.8 中的区别
    【zabbix】zabbix 高可用架构的实现
    利用zabbix监控Vmware运行
    logback在SpringBoot下出现no applicable action for [appender], current ElementPath is
    NGUI:HUD Text(头顶伤害漂浮文字)
  • 原文地址:https://www.cnblogs.com/leifei/p/8258949.html
Copyright © 2011-2022 走看看