前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java设计模式之【单例模式】

Java设计模式之【单例模式】

作者头像
用户2409797
发布2019-02-25 15:02:47
4300
发布2019-02-25 15:02:47
举报
文章被收录于专栏:Java修行之道Java修行之道

Java设计模式之【单例模式】

何为单例

在应用的生存周期中,一个类的实例有且仅有一个

当在一些业务中需要规定某个类的实例有且仅有一个时,就可以用单例模式

比如spring容器默认初始化的实例就是单例的

单例如何实现

1、在类中定义私有的静态变量,类型为本类

2、构造器私有化

3、获取单实例的共有静态方法

代码

一、懒加载模式

public class Component {

    /**
     * 定义私有的静态变量来存放本类的单实例
     * 私有保证外部无法直接获取本实例
     * 静态保证本实例不会被回收
     */
    private static Component component;

    private Component(){}   //构造器私有化,保证外部无法生成本类的实例,只能在本类中创建实例

    /**
     * 公共的静态同步方法用来获取本类的单实例
     * 保证线程安全(只有一个实例)
     * 延迟加载单实例,在第一次调用时才初始化本实例
     * @return
     */
    public static synchronized Component getInstance(){
        if(component == null)
            component = new Component();
        return component;
    }

}

二、积极加载模式

public class Component {

    private static Component component = new Component();   //在类加载的时候就初始化本实例

    private Component(){}   //构造器私有化保证只能在类内部创建本实例

    public static Component getInstance(){
        return component;
    }

}

三、双重判断加锁模式

public class Component {

    private static Component component;

    private Component(){}

    /**
     * 双重判断加锁机制
     * @return
     */
    public static Component getInstance(){
        if(component == null){
            synchronized (Component.class){
                if(component == null)
                    component = new Component();
            }
        }
        return component;
    }

}

在懒加载模式中,每次获取实例都要加锁,这会使程序运行速度变慢,通过双重判断加锁机制可以解决这个问题

方法本身不加锁,进入方法之后先判断实例是否存在,如果存在就直接返回了,这里是多线程的

如果不存在,往下走就加锁变单线程了,但是在进入同步块中还要进行一次判断

关于单例模式这篇博客讲得很好:https://www.cnblogs.com/V1haoge/p/6510196.html

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-08-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java设计模式之【单例模式】
  • 何为单例
  • 单例如何实现
  • 代码
    • 一、懒加载模式
      • 二、积极加载模式
        • 三、双重判断加锁模式
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档