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

  

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

        公开课SingletonTest {   私人SingletonTest () {   }   私有静态SingletonTest实例;   公共静态SingletonTest getInstance () {   如果(实例==null) {   同步(SingletonTest.class) {   如果(实例==null) {   实例=new SingletonTest ();   }   }   }   返回实例;   }   }      

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

  

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

  

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

        公开课SingletonTest {   私人SingletonTest () {   }   私有静态稳定SingletonTest实例;   公共静态SingletonTest getInstance () {   如果(实例==null) {   同步(SingletonTest.class) {   如果(实例==null) {   实例=new SingletonTest ();   }   }   }   返回实例;   }   }      

<强>总结

  

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

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