单利模式与多线程

我是阿福,公众号「JavaClub」作者,一个在后端技术路上摸盘滚打的程序员,在进阶的路上,共勉!
文章已收录在 JavaSharing中,包含Java技术文章,面试指南,资源分享。

一、为什么使用单利模式

单利:表面的意思就是一个类只能存在一个实例,那我们什么时候会用到单利模式呢?

最常见的有以下几种场景

1、Windows的Task Manager(任务管理器)就是很典型的单例模式
2、项目中,读取配置文件的类,一般也只有一个对象。没有必要每次使用配置文件数据,每次new一个对象去读取。
3、数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。
4、在Spring中,每个Bean默认就是单例的,这样做的优点是Spring容器可以管理 。
5、在servlet编程中/spring MVC框架,每个Servlet也是单例 /控制器对象也是单例.

综上所述单利有两个好处:

1、节省内存
2、方便管理

二、单利模式的定义及特点

单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。

单例模式有 三个特点:

1、类只有一个实例对象;
2、该单例对象必须由单例类自行创建;
3、类对外提供一个访问该单例的全局访问点;

三、单利模式的实现方式

我们实现单利模式主要抓住三个特点:

1、将构造函数私有化
2、在类的内部创建实例
3、提供获取唯一实例的方法

1、懒汉模式

该模式的特点是在类加载时没有创建实例,只有第一次调用方法getInstance()时才会创建单利对象,具体代码如下:

/**
 * 懒汉式单利模式(线程安全,调用效率不高,但是,可以实现延时加载)
 */
public class SingletonL {
    private static SingletonL instance = null;

    private SingletonL() {  //避免类在外部被实例化

    }

    //创建对象的外部方法
    public static SingletonL getInstance() {
        if (null == instance) {
            instance = new SingletonL();
        }
        return instance;
    }
}

这个实验虽然能取得一个对象的实例,但是在多线程的环境中,就会取的多个实例对象,那么如何解决懒汉模式在多线程中的问题呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值