文章目录
单例模式
懒汉模式
/***
* 单例 懒汉模式
* 使用的时候再创建实例
* 线程不安全
*/
public class LazeSingle {
private static LazeSingle lazeSingle;
public LazeSingle() {
}
public static LazeSingle getLazeSingle() {
if (lazeSingle == null) {
lazeSingle = new LazeSingle();
}
return lazeSingle;
}
}
饿汉模式
/***
* 饿汉模式 线程安全
* 加载的时候就实例化了
*/
public class HungrySingle {
private static HungrySingle hungrySingle = new HungrySingle();
public static HungrySingle getHungrySingle(){
return hungrySingle;
}
}
双重锁校验的单例模式
/***
* 双重锁校验的单例模式 线程安全
*/
public class DoubleLockSingle {
private static volatile DoubleLockSingle doubleLockSingle;
public DoubleLockSingle() {
}
public static DoubleLockSingle getDoubleLockSingle() {
if (doubleLockSingle == null) {
synchronized (DoubleLockSingle.class) {
if (doubleLockSingle == null) {
doubleLockSingle = new DoubleLockSingle();
}
}
}
return doubleLockSingle;
}
}
枚举单例
public enum SingleEnum {
INSTANCE;
private final Object obj;
SingleEnum() {
this.obj = new Object();
}
public Object getString() {
return obj;
}
}
public static void main(String[] args) {
SingleEnum instance = SingleEnum.INSTANCE;
SingleEnum instance2 = SingleEnum.INSTANCE;
System.out.println(instance);
System.out.println(instance2);
System.out.println(instance.getString());
System.out.println(instance2.getString());
}
/* 打印结果
INSTANCE
INSTANCE
java.lang.Object@707f7052
java.lang.Object@707f7052 */
单例模式在实际开发中的应用
作为配置类存在。
一般配置只能有一份。
作为缓存存在。
比如要在内存里记录一些东西。可能使用饿汉模式直接存储。
线程池。
使用双重锁校验模式,创建线程池。