1. 私有化构造器
    2. 内部声明静态对象
    3. 提供获取对象的方法

    一、饿汉式单例模式
    缺点: 类加载时就创建对象,加载时间过长
    优点: 天然就是线程安全的

    1. /**
    2. * 单例模式--饿汉式
    3. */
    4. public class Dog {
    5. // 静态属性 随着类加载而加载
    6. private static Dog dog = new Dog();
    7. // 构造器设为私有 禁止外部创建对象
    8. private Dog() {
    9. }
    10. /**
    11. * 将唯一的对象返回
    12. * @return
    13. */
    14. public static Dog getDog() {
    15. return dog;
    16. }
    17. }

    二、懒汉式单例模式
    缺点: 线程不安全
    优点: 使用时在创建对象

    1. /**
    2. * 单例模式--懒汉式
    3. */
    4. public class Dog {
    5. // 静态属性 随着类加载而加载
    6. private static Dog dog = null;
    7. // 构造器设为私有 禁止外部创建对象
    8. private Dog() {
    9. }
    10. /**
    11. * 将唯一的对象返回
    12. * @return
    13. */
    14. public static Dog getDog() {
    15. if (dog == null) {
    16. dog = new Dog();
    17. }
    18. return dog;
    19. }
    20. }

    三、线程安全的懒汉式单例模式

    1. /**
    2. * 创建人:LYY
    3. * 创建时间:2022/4/27
    4. * 懒汉式单实例
    5. * 线程安全的
    6. * 同步方法实现线程安全的
    7. */
    8. public class Dog {
    9. // 全局静态变量
    10. private static Dog dog = null;
    11. //私有化构造器
    12. private Dog() {
    13. }
    14. /**
    15. * 同步方法实现线程安全
    16. * @return
    17. */
    18. public static synchronized Dog getDog() {
    19. if (dog == null) {
    20. dog = new Dog();
    21. }
    22. return dog;
    23. }
    24. }
    1. /**
    2. * 创建人:LYY
    3. * 创建时间:2022/4/27
    4. * 懒汉式单实例
    5. * 线程安全的
    6. * 同步代码块实现线程安全的
    7. */
    8. public class Dog {
    9. // 全局静态变量
    10. private static Dog dog = null;
    11. //私有化构造器
    12. private Dog() {
    13. }
    14. /**
    15. * 同步代码块实现线程安全
    16. * @return
    17. */
    18. public static synchronized Dog getDog() {
    19. // 效率更好
    20. if (dog == null) {
    21. // 同步代码块
    22. synchronized (Dog.class) {
    23. if (dog == null) {
    24. dog = new Dog();
    25. }
    26. }
    27. }
    28. return dog;
    29. }
    30. }