单例测试模式中【饿汉式】与【懒汉式】的区别

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

 */

  

猜你喜欢

转载自www.cnblogs.com/sunyubin/p/9764321.html