package day25.thread;/**
/*** @author Mr Chen* @create 2018-10-09 18:37* 单例测试模式:保证类在内存中只有一个对象*/
public class Dome01 {public static void main(String[] args){Singleton s1 = Singleton.s; //成员变量被私有,不能用类名.调用Singleton s2 = Singleton.s;System.out.println(s1==s2);// Singleton s1 = Singleton.getS();
// Singleton s2 = Singleton.getS();
//
// System.out.println(s1==s2);}
}
/*
//饿汉式
class Singleton{//1、私有构造方法,其他类不能访问该构造方法private Singleton(){}//2、创建本类对象
// public Singleton s = new Singleton();虽说私有了,别的不能访问,但是自己还是可以访问的,这里创建的s,是成员变量,必须要用成员变量调用它。private static Singleton s = new Singleton();//但是这里没有对象,只能用类名点对象调用//就是说如果是非静态的成员变量,只能用对象点。如果是静态成员变量,可以用类名.调用//3、对外提供公共的访问方法public static Singleton getS(){return s;}
}*///懒汉式/*
class Singleton{//1、私有构造方法,其他类不能访问该构造方法private Singleton(){}//2、声明一个引用
// public Singleton s = new Singleton();虽说私有了,别的不能访问,但是自己还是可以访问的,这里创建的s,是成员变量,必须要用成员变量调用它。private static Singleton s;//但是这里没有对象,只能用类名点对象调用//就是说如果是非静态的成员变量,只能用对象点。如果是静态成员变量,可以用类名.调用//3、对外提供公共的访问方法public static Singleton getS(){//线程1等待,线程2访问if (s==null){s=new Singleton();}return s;}
}*/class Singleton{//1、私有构造方法,其他类不能访问该构造方法private Singleton(){}//2、声明一个引用public static final Singleton s =new Singleton();//但是这里没有对象,只能用类名点对象调用}/*
饿汉式与懒汉式的区别
1、饿汉式:用空间换来了时间;懒汉式:用时间换空间(不推荐)
2、在多线程访问时,饿汉式不会创建多个对象,懒汉式有可能会创建多个对象*/