今天覆習了一下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
餓漢式天生線程安全,類加載的時候初始化一次對象,效率比懶漢式高。線程