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

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

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