单例模式 Singleton
一个类只能有一个实例,且该实例是由自己自行创建
特点
- 单例模式只有一个实例对象
- 该单例对象必须由单例类自行创建
- 对外提供一个获取该单例对象的公共方法
饿汉式单例
package com.learn.singleton;
/**
* 类加载到内存后,就实例一个单例,JVM 线程安全
* 缺点:不管有没有用到,类装载时都会实例化
*/
/**
* 类加载到内存后,就实例一个单例,JVM 线程安全
* 缺点:不管有没有用到,类装载时都会实例化
*/
public class Singleton {private static final Singleton INSTANCE = new Singleton();
private Singleton() {}
public static Singleton getInstance() {return INSTANCE;}
// public static void main(String[] args) {// Singleton instance1 = Singleton.getInstance();
// Singleton instance2 = Singleton.getInstance();
// System.out.println(instance1 == instance2);
// }
懒汉式单例
package com.learn.singleton;
/**
* 使用 synchronized 解决线程不安全的问题
* synchronized 直接加在方法上会单来性能问题
*/
public class Singleton {
private static volatile Singleton INSTANCE = null;
private Singleton() {}
public static Singleton getInstance() {if (INSTANCE == null) {
// 双重检查
synchronized (Singleton.class) {if (INSTANCE == null) {
// try {// Thread.sleep(1);
// } catch (InterruptedException e) {// e.printStackTrace();
// }
INSTANCE = new Singleton();}
}
}
return INSTANCE;
}
// public static void main(String[] args) {// for (int i = 0; i < 50; i++) {// new Thread(() -> {// System.out.println(Singleton.getInstance().hashCode());
// }).start();
// }
// }
}
正文完