吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1909|回复: 2
收起左侧

[Java 转载] 单例模式

[复制链接]
Alones 发表于 2022-4-22 15:31
本帖最后由 Alones 于 2022-4-22 18:06 编辑
什么是单例模式

单例设计模式,采取一定的方法保证整个系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得对象实例的方法。

单例模式优点:只生成一个实例,减少了系统性能开销,当一个对象产生比较多的资源时,如读取配置,产生其他依赖对象时,则可以通过应用在启动时产生一个单例对象,然后永久驻留内存的写法

单例模式

应用场景:

  1. 网站的计数器
  2. 应用程序日志应用
  3. 数据库连接池
  4. 项目中读取配置的类
单例设计模式:饿汉式 vs 懒汉式
 * 1.类的单例模式,就是采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例
 * 2.如何实现
 * 饿汉式 vs 懒汉式
 * 3.区分懒汉式和饿汉式
 * 饿汉式:
 * 好处:线程安全
 * 坏处: 对象加载时间过长
 * 懒汉式:
 * 好处: 延迟对象的创建
 * 目前写法坏处: 线程不安全 --->多线程内容时,线程不安全

饿汉式写法:

class Bank {
    //    1.私有化类构造器
    private Bank() {

    }

    //    2.内部创建类的对象
    //   4.要求对象也必须声明为静态
    private static Bank instance = new Bank();

    //    3.提供公共的静态方法,返回类的对象
    public  static Bank getInstance() {
        return instance;
    }
}

懒汉式写法:

class Order {
    //    1.私有化类的构造器
    private Order() {

    }

    //    2.声明当前类的对象
//    4.此对象也必须是静态的
    private static Order instance = null;

    //    3.声明public static的返回当前对象的方法
    public static Order getInstance() {
        if (instance == null) {
            instance = new Order();
        }
        return instance;
    }
}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

emhui 发表于 2022-4-22 16:01
是不是写错了?
第一个代码是线程安全的,在类初始化的时候就创建了。第二个代码线程不安全,多线程在执行getInstance()的时候可能会生成多个对象。
下面这种用锁的方式也是线程安全的。
[Java] 纯文本查看 复制代码
class Order {
    //    1.私有化类的构造器
    private Order() {

    }

    //    2.声明当前类的对象
//    4.此对象也必须是静态的
    private volatile static Order instance = null; // 使用 volatile声明

    //    3.声明public static的返回当前对象的方法
    public static Order getInstance() {
        if (instance == null) {
synchronized(Order.class){
if (instance == null) {
            instance = new Order();
}
}
        }
        return instance;
    }
}

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
Thy + 1 + 1 标准双检锁面试题了,顺势再问你两个if和volatile的作用,考察对锁粒度及指.
Alones + 1 + 1 对对,写错了,马虎了

查看全部评分

yaodada 发表于 2022-7-29 17:29
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 03:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表