首页 > 设计模式:单例

设计模式:单例

  •  传统的实现方法:两私一公,涉及线程安全问题(即使有多重检查锁也可以通过反射破坏单例)
public class Singleton {private volatile static Singleton instance = null;private Singleton () {}public static Singleton getSingleton() {if(instance == null) {synchronized(Singleton.class) { if(instance == null) { instance = new Singleton(); } } } return instance; } }
  • JDK1.5以前
public class Singleton {private static class SingletonInstance {private static final Singleton instance = new Singleton();}private Singleton() {}public static Singleton getSingleton() {return SingletonInstance.instance; } }
  •  目前最为安全的实现单例的方法是通过内部静态enum的方法来实现,因为JVM会保证enum不能被反射并且构造器方法只执行一次。
public class Singleton {private Singleton() {}public static Singleton getInstance() {return SingletonEnum.INSTANCE.getInstance();}private static enum SingletonEnum {INSTANCE;private Singleton singleton = null;private SingletonEnum() {singleton = new Singleton();}public Singleton getInstance() {return this.singleton;}}public static void main(String[] args) {Singleton singleton1 = Singleton.getInstance();Singleton singleton2 = Singleton.getInstance();System.out.println("singleton1==singleton2? " + (singleton1==singleton2));}
}

 

转载于:https://www.cnblogs.com/hellocyc/p/6754101.html

更多相关:

  • 1 // singleton.h 2 3 #ifndef SINGLETON_H 4 #define SINGLETON_H 5 6 // 单例基类模板 7 template 8 class Singleton 9 { 10 public: 11 static T& give_me(...

  • 设计模式-单键(Signelton):其实单键的设计模式说来很简单,说的直白一点就是程序运行过程中保证只有一个实例在运行而已。在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。实现方法是将类的构造函数设置为私有,然后显示的提供一个方法来返回此对像的实例。   class...

  • Socket基本编程 服务端: using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; Thread mythread ; Socket socket; // 清理所有正在使用的资源。 protected overri...

  • 第一个测试的主要代码: private function closureTest():void{this.addEventListener(Event.ENTER_FRAME, onEnter);}private var num:int = 1000;private function onEnter(e:Event):void{fo...

  • jdt可以做语法树分析,并且支持visitor模式对代码进行分析。跟pmd的分析方式一样,我们只要实现 visitor接口即可实现一个插件。 @Service("requestMappingInfoService")public class RequestMappingInfoServiceImpl implements Reques...

  • 1.静态方法 static:通常在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法 声明为static的方法有以下几条限制: (1)它们仅能调用其他的static方法。  (2)它们只能访问static数据。 (3)它们不能以任何方式引用this 或super。 class Simple {static v...

  • 类的静态构造函数也叫类型构造器,静态构造器,他调用的时刻由CLR来控制:CLR会选择如下时间之一来调用静态构造函数:      1,在类型的第一个实例创建之前,或类型的非继承字段或成员第一次访问之前。这里的“之前”,代表前后衔接的意思。这里的时刻是精确的!      2,在非继承的静态字段或成员第一次访问之前的某个时刻,具体时刻不定!...

  • 2019独角兽企业重金招聘Python工程师标准>>> django的settings中包含三个static相关设置项: STATIC_ROOT STATIC_URL STATICFILES_DIRS STATIC_URL 好理解,就是映射到静态文件的url,一般为/static/ STATICFILES...