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