• 单例模式?学习懒汉式和饿汉式


    单例模式

    1.单例模式的懒汉式实现package com.shine.study.designpatterns.singletonpatterns;

    package com.shine.study.designpatterns.singletonpatterns;
    
    /**
     * @Author: Shine EtherealWind
     * @Description: 懒汉式
     * 1.定义全局可见的对象引用;
     * 2.私有化的构造函数(每个类都有隐式的无参构造函数,
     *   这里显示写了私有构造函数也是制止其他类里面使用new的方式构造出这个类的对象);
     * 3.获取单例对象的方法,使用synchronized保证在并发情况下是线程安全的;
     * @Date: create in 17:10 2022/2/24
     */
    public class LazySingleton {
        //
        private static volatile LazySingleton instance = null;
    
        private LazySingleton(){ }
    
        public static LazySingleton getInstance() {
            if (instance == null){
                synchronized (LazySingleton.class){
                    if (instance == null){
                        instance = new LazySingleton();
                    }
                }
            }
            return instance;
        }
    }
    
    class TestMain{
        public static void main(String[] args) {
            LazySingleton lazySingleton1 = LazySingleton.getInstance();
            LazySingleton lazySingleton2 = LazySingleton.getInstance();
            /*
             * eqquals 方法表示两个对象的hashCode相同,且在同一个hashCode上的位置也相同;
             */
            System.out.println("懒汉式单例两次获取的对象是否相同?"+ lazySingleton1.equals(lazySingleton2));
        }
    }

    运行结果

    2.单例模式的饿汉式实现

    package com.shine.study.designpatterns.singletonpatterns;
    
    import java.awt.*;
    
    /**
     * @Author: Shine EtherealWind
     * @Description: 饿汉式
     * 1.定义对象的引用 instance 并且同时给定该单例引用的实例对象;(也可以将实例对象的写法改成静态代码块)
     * 2.私有化的构造函数(每个类都有隐式的无参构造函数,
     *   这里显示写了私有构造函数也是制止其他类里面使用new的方式构造出这个类的对象);
     * 3.获取单例对象的方法;  
     * @Date: create in 17:15 2022/2/24
     */
    public class HungrySingleton {
        private static final HungrySingleton instance = new HungrySingleton();
    
        private HungrySingleton(){}
    
        public static HungrySingleton getInstance(){
            return instance;
        }
    }
    
    
    class TestMain2{
        public static void main(String[] args) {
           HungrySingleton hungrySingleton1 = HungrySingleton.getInstance();
           HungrySingleton hungrySingleton2 = HungrySingleton.getInstance();
        //equals 方法表示两个对象的hashCode相同,且在同一个hashCode上的位置也相同
           System.out.println("饿汉式单例两次获取的对象是否相同?"+ hungrySingleton1.equals(hungrySingleton2));
        }
    }

    运行结果

  • 相关阅读:
    Java面向对象
    JBCD技术
    初识数据库(其他数据库对象)
    初识数据库(TCL语句)
    初识数据库(分组函数)
    初识数据库(函数)
    初识数据库(数据类型)
    Java中的IO流
    Java中的线程
    Java中的集合
  • 原文地址:https://www.cnblogs.com/EtherealWind/p/15935858.html
Copyright © 2020-2023  润新知