欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

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

时间:2021-03-20 10:02:15|栏目:JAVA代码|点击:

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

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;
  }
}

总结

上一篇:SpringMVC源码解读之 HandlerMapping - AbstractDetectingUrlHandlerMapping系列初始化

栏    目:JAVA代码

下一篇:Java基于二维数组实现的数独问题示例

本文标题:Java正确实现一个单例设计模式的示例

本文地址:http://www.codeinn.net/misctech/84529.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有