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

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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM