Java正确实现一个单例设计模式的示例

所属分类: 软件编程 / java 阅读数: 44
收藏 0 赞 0 分享

设计模式中的单例,是最常用,也算是比较简单的一个了。我们都知道,要想保证只有一个实例,通常采用加锁和双重检查的方式来实现单例,代码如下。

public class SingletonTest {
  private SingletonTest(){
  }
  private static SingletonTest instance;
  public static SingletonTest getInstance(){
    if(instance == null){
      synchronized (SingletonTest.class){
        if(instance == null){
          instance = new SingletonTest();
        }
      }
    }
    return instance;
  }
}

这种写法的要点主要有如下几个,1,私有构造函数,即不允许直接调用构造函数new一个对象。2,静态实例。3,静态获取示例的方法。首先判断instance是否为null,然后加锁,然后再判断instance是否为null,之后进行初始化。最后返回示例。

做到这些就足够了吗?并不是。

我们都知道,jvm的内存模型,jvm中的线程有自己的工作内存,jvm有主内存,工作内存是主内存的拷贝,工作内存和主内存直接并不是实时一致的。一个线程创建了单例对象后,别的线程并不一定可以立刻感知到。所以,以上代码中,instance还需要用volatile来修饰,才能真正做到单例模式。修改后的代码如下。

public class SingletonTest {
  private SingletonTest(){
  }
  private static volatile SingletonTest instance;
  public static SingletonTest getInstance(){
    if(instance == null){
      synchronized (SingletonTest.class){
        if(instance == null){
          instance = new SingletonTest();
        }
      }
    }
    return instance;
  }
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

更多精彩内容其他人还在看

java实现背单词程序

这篇文章主要为大家详细介绍了java实现背单词程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

java实现单词查询小程序

这篇文章主要为大家详细介绍了java实现单词查询小程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Java程序开发环境配置图文教程

这篇文章主要为大家详细介绍了Java程序开发环境配置图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

详解ssh框架原理及流程

在本文中小编给大家整理的是关于ssh框架原理及流程的相关知识点内容,有此需要的朋友们可以学习下。
收藏 0 赞 0 分享

Java实现弹窗效果的基本操作

这篇文章主要为大家详细介绍了Java实现弹窗效果的基本操作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

详解springmvc常用5种注解

在本篇里我们给大家总结了关于springmvc常用5种注解相关知识点以及实例代码,需要的朋友们参考下。
收藏 0 赞 0 分享

Java实现弹窗效果的基本操作(2)

这篇文章主要为大家详细介绍了Java实现弹窗效果的基本操作第二篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Spring Boot假死诊断实战记录

这篇文章主要给大家介绍了关于Spring Boot假死诊断的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring Boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享

Java计时新姿势StopWatch详解

这篇文章主要介绍了Java计时新姿势StopWatch,最近公司来了个大佬,从他那里学到不少东西,其中一个就是计时的新姿势「StopWatch」,需要的朋友可以参考下
收藏 0 赞 0 分享

java实现点击按钮弹出新窗体功能

这篇文章主要为大家详细介绍了java实现点击按钮弹出新窗体功能,旧窗体不进行操作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享
查看更多