Java单例适用场景:
1. 需要生成唯一序列的环境
2. 需要频繁实例化然后销毁的对象。
3. 创建对象时耗时过多或者耗资源过多,但又经常用到的对象。
4. 方便资源相互通信的环境
Java 单例模式有五种实现方式:分别是
- 饿汉式
- 懒汉式
- Double CheckLock实现单例
- 今天内部模式
- 枚举类
Double CheckLock实现单例有如下特点:
Double CheckLock也就是双重锁判断机制(由于JVM底层模型原因,偶尔会出问题, 不建议使用),是在懒汉式单例上发展而来,具体的代码如下显示:
/**
* * Double CheckLock实现单例
* Double CheckLock也就是双重锁判断机制(由于JVM底层模型原因,偶尔会出问题,不建议使用)
* @author DRJ
*
*/
public class SingletonThree {
//构造器
private volatile static SingletonThree instance;
//私有化构造器
private SingletonThree(){
}
//静态工厂方法,双重锁判断机制
public static SingletonThree newInstance(){
if(instance == null){
//这里其实就是加锁
synchronized (SingletonThree.class){
if(instance == null){
instance = new SingletonThree();
}
}
}
return instance;
}
}
如下显示的是枚举类的方法:
特点:线程安全,调用效率高,不能延时加载,可以天然的防止反射和反序列化调用
package com.lx.singleton;
/**
* 枚举类实现单例
* @author DRJ
*
*/
public class SingletonFive {
//
// enum enumName{
// //各种变量
// Name,Age,seff,jhhh,
// }
//私有化构造器
private SingletonFive(){
}
//使用枚举
private static enum Singleton{
INSTANCE;
private SingletonFive singleton;
//JVM会保证此方法绝对值调用一次
private Singleton(){
singleton = new SingletonFive();
}
public SingletonFive getInstance(){
return singleton;
}
}
//静态工厂方法
public static SingletonFive getInstance(){
return Singleton.INSTANCE.getInstance();
}
}