package july.star.thread22;
/**
* Teacher
* 饿汉式:类一加载就加载
* 懒汉式:需要时才加载
* 面试题:单例模式的思想是什么,请用代码体现。
* 开发:饿汉式(不会出现问题的单例模式)
* 面试:懒汉式(可能会出现问题的单例模式)
* A:懒加载(延迟加载)
* B:线程安全问题
* a:是否多线程环境 是
* b:是否有共享数据 是
* c:是否有多条数据操作共享数据 是
* @author MoXingJian
* @email 939697374@qq.com
* @date 2016年12月10日 下午9:52:02
* @version 1.0
*/
public class Teacher {
//私有构造方法
private Teacher(){
}
//设置对象为空
private static Teacher t = null;
//假设有3个线程进来 t1,t2,t3
//如果要解决线程安全问题就要加synchronized
public synchronized static Teacher getTeacher(){
//t1,t2,t3
if(t == null){
//如果不加同步锁,t1,t2,t3都会进入到这里,那就创建了3个对象
t = new Teacher();
}
return t;
}
}
//测试
package july.star.thread22;
/**
* TeacherDemo
* 单例设计模式之懒汉式
* @author MoXingJian
* @email 939697374@qq.com
* @date 2016年12月10日 下午9:57:49
* @version 1.0
*/
public class TeacherDemo {
public static void main(String[] args) {
//创建对象
Teacher t1 = Teacher.getTeacher();
Teacher t2 = Teacher.getTeacher();
System.out.println(t1 == t2); //true
System.out.println(t1); //对象一样:july.star.thread22.Teacher@65712a80
System.out.println(t2); // july.star.thread22.Teacher@65712a80
}
}
设计模式之单例设计模式(懒汉式)
最新推荐文章于 2023-01-31 14:52:31 发布