Java单例模式

单例模式提供一种创建对象的方式,所以疏远创建型模式。单例模式就是在创建对象的同时也要确保创建单个对象。单例类不需要实例化。使用到单例模式的优点,减少了内存的开销,避免多重占用资源。单例类不能继承。单例模式使用需要全面考虑线程和资源占用的问题,单例模式实现的实现方式:懒汉式、饿汉式、加锁同步、双重校验锁、使用枚举实现单例等,饿汉式举例,代码如下

Java单例模式

从上面代码可以看出首先是创建实例,不管有没有调用singlecase()方法,它都会先创建一个实例,虽然线程安全,但会浪费资源。

懒汉式,下面代码可以看出使用if语句判断是否为空,当调用方法时创建实例,这种方式虽然节省资源,但线程不安全,也不支持多线程,没有加锁synchronized。多线程会造成创建多个实例的情况出现。

Java单例模式

 

使用synchronized加锁同步,

Java单例模式

虽然这样写可以实现多线程,也能保证线程的安全问题,但因为使用synchronized修饰,所以当调用get()方法的频率高的时候,会造成性能差的问题。

双重校验锁(满足多线程安全,并能保证高性能),代码如下

Java单例模式

 

使用关键字volatile禁止指令重排序优化,私有构造方法,判断checktest是否为空,为空的话加锁初始化,否则返回checktest

 

枚举实现单例模式。

Java单例模式

获取实例对象:Singtest.EXAMPLE  调用方法:Singtest. EXAMPLE.test()

使用枚举实现单例模式,代码简洁,能绝对实现防止对此实例化,也能解决多线程同步问题。

实现单例模式有多种,可以根据自己,、对线程,资源的要求来选取合适的方法