单例模式
单例模式提供多线程情况下保证实例唯一性的解决方案。通过线程安全,高性能,懒加载三个方面看下面7种单例模式实现。
饿汉式
/**
* 饿汉式
*/
// 添加final 不能被继承
public final class SingLeton1 {
// 实例变量
private Byte[] data = new Byte[1024];
// 定义实例对象时直接初始化
private static SingLeton1 instance = new SingLeton1();
// 私有构造 不允许外部new
private SingLeton1(){
}
// 外部调用方法
public static SingLeton1 getInstance() {
return instance;
}
}
这种方式 在类加载完成后单例对象会一直存在堆内存中,如果实例变量是比较重的资源就不太合适。多个线程通过getInstance方法获取对象性能比较高,线程安全,但无法懒加载。
懒汉式
/**
* 懒汉式 类加载时不直接初始化
*/
public final class Singleton2 {
private byte[] data = new byte[1024];
// 不直接初始化 通过方法判断后再初始化
private static Singleton2 instance = null;
private Singleton2(){
}
// 方法中判断是否为null 再初始化
public static Singleton2 getInstance() {
if