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.總結測試

  懶漢式線程不安全,須要加上同步鎖,同步鎖影響了程序執行效率。spa

      餓漢式天生線程安全,類加載的時候初始化一次對象,效率比懶漢式高。線程

相關文章
相關標籤/搜索