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、在多线程访问时,饿汉式不会创建多个对象,懒汉式有可能会创建多个对象 */