java单例模式

来源:互联网 发布:电脑温度监控软件 编辑:程序博客网 时间:2024/05/16 01:21

java单例模式

标签(空格分隔): java 单例 设计模式


  • java单例模式
      • 概念
      • 实现思路
      • 饿汉式
      • 懒汉式
      • 双重检查加锁

概念

单例模式 指的是一个类只有一个实例,并且提供一个全局访问点

实现思路

  • 在单例模式的类中设置一个private静态变量field,类型为当前类,用来持有单例唯一的实例
  • 同时将无参数的构造函数访问修饰符设置为private,避免外部使用new构造多个实例
  • 提供一个public静态方法用于返回该类的唯一实例

饿汉式

指的式单例的实例在类装载时进行创建
如下:

public class SingleInstance {    //定义一个静态的私有的该类类型的field字段    private static SingleInstance sInstance = new SingleInstance();    //私有无参构造器    private SingleInstance() {    }    //提供共有的静态访问方法    public static SingleInstance getSinstance() {        return sInstance;    }}
  • 常常用于单例类的构造方法中没有太多的处理逻辑,因为如果存在过多的处理,会导致加载这个类比较慢,影响性能
  • 使用饿汉式,只进行了类的装载,并没有实质的调用,造成资源的浪费

懒汉式

指在第一次使用时进行创建,避免了饿汉式遇到的问题
如下:

public class SingleInstance {    //定义一个静态的私有的该类类型的field字段    private static SingleInstance sInstance;    //私有无参构造器    private SingleInstance() {    }    //提供共有的静态访问方法    public static SingleInstance getSinstance() {        if (null == sInstance) {            sInstance = new SingleInstance();        }        return sInstance;    }}

懒汉式在遇到多线程的并发操作时,可能会造成多个实例的产生,所以保证多线程产生单例的方法就是使用Synchronized修饰getSinstance()方法,即如下代码:

public class SingleInstance {    //定义一个静态的私有的该类类型的field字段    private static SingleInstance sInstance;    //私有无参构造器    private SingleInstance() {    }    //提供共有的静态访问方法    public static synchronized SingleInstance getSinstance() {        if (null == sInstance) {            sInstance = new SingleInstance();        }        return sInstance;    }}

保证安全之后性能必然下降,同时改方法是一个被频繁调用的方法,所以不推荐这样使用。

双重检查加锁

首先进入该方法时进行null == sInstance检查,如果第一次检查通过,即没有创建实例,则进入synchronized控制的代码同步块,并再次检查实例是否创建,如果仍为创建,则创建该实例,如下:

public class SingleInstance {    //定义一个静态的私有的该类类型的field字段    private static SingleInstance sInstance;    //私有无参构造器    private SingleInstance() {    }    //提供共有的静态访问方法    public static synchronized SingleInstance getSinstance() {        if (null == sInstance) {            synchronized (SingleInstance.class) {                if (null == sInstance) {                    sInstance = new SingleInstance();                }            }        }        return sInstance;    }}

该机制保证了多线程下只创建一个实例,并且加锁代码只在实力创建的之前进行同步。如果实例已经创建,进入该方法,则不会执行同步代码

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 4个月婴儿积食怎么办 黑色的衣服泛红怎么办 不听劝的人该怎么办 牛仔裙子腰大了怎么办 天猫店铺降权怎么办 淘宝做文胸的标题要怎么办 秋衣弹力衣服松了怎么办 假离婚变成真的怎么办 百家利钱不到账怎么办 皮鞋撑大了怎么办变小 鞋穿着走路掉跟怎么办 浅口帆布鞋大了怎么办 布鞋后鞋跟老掉怎么办 穿坡跟凉鞋容易打滑摔倒怎么办 运动鞋烂了个口怎么办 运动鞋的网烂了怎么办 运动鞋鞋一个一个高一个低怎么办 淘宝预售水果不发货怎么办 淘宝评价忘记晒图了怎么办 参加水果展没有实物怎么办 没做过运营面试怎么办 苹果5s16g内存满了怎么办 618天猫有活动淘宝没有怎么办 天猫国际买到假货怎么办 天猫恶意差评怎么办 天猫删除差评被扣分了怎么办 天猫收到差评怎么办 天猫给差评骚扰怎么办 天猫客户差评怎么办 天猫没法给差评怎么办 天猫上限购一件怎么办 拍下商品不发货怎么办 天猫红包过期了怎么办 买天猫店被中介骗了钱怎么办 速卖通假货纠纷怎么办 天猫新开店被恶意拍下怎么办 新开的天猫店没有生意怎么办 银行的支票丢了怎么办 天猫积分用光了怎么办 淘宝店没有无线流量怎么办 京东卖家不发货怎么办会自动打款