单例模式
为解决对象频繁创建销毁带来资源浪费,对于一些频繁用到的类型,且不需要创建新的对象,可以公用一个对象进行处理,比如加密算法类,可以直接使用单个类进行加解密
单例模式的几种 类型
懒汉式
/**
* 懒汉模式
* 线程不安全
*
*/
public final class Single1 {
private Single1 single1;
private Single1() {
}
public Single1 getSingle1Instance() {
if (single1 == null) {
single1 = new Single1();
}
return single1;
}
}
线程安全懒汉式
/**
* 懒汉模式
* 线程安全
*/
public final class Single2 {
private Single1 single2;
private Single2() {
}
public synchronized Single1 getSingle2Instance() {
if (single2 == null) {
single2 = new Single1();
}
return single2;
}
}
饿汉式
/**
* 饿汉模式
* 线程安全
*/
public final class Single3 {
private static final Single1 single3 = new Single3();
private Single3() {
}
public Single3 getSingle3Instance() {
return single3;
}
}
双重锁
/**
* 双锁模式
* 线程安全
* 延迟加载
*/
public final class Single4 {
private volatile static Single4 single4;
private Single4() {
}
public static synchronized Single4 getSingle4Instance() {
if (single4 == null) {
synchronized (Single4.class) {
single4 = new Single4();
}
}
return single4;
}
静态内部类
/**
* 登记
* 静态内部类
* 延迟加载
*/
public final class Single5 {
public final static class SingleHolder {
private static final Single5 INSTANCE = new Single5();
}
private Single5() {
}
private static final Single5 getSingle5Instance() {
return SingleHolder.INSTANCE;
}
}
枚举方式
/**
* 枚举形式
* 线程安全 jvm保证
* 支持反序列化
*非延迟加载
*/
public enum Single6 {
INSTANCE;
public void someMethod() {
}
}