java 设计模式之单例模式学习

最近开始学习一些java 设计模式,就先从最基础简单好理解的单利模式开始。以下是对不同实现单利模式理解学习。

package com.dairuijie.controller;

/**
 * 
 * @author DRJYY 单利模式 懒汉模式 缺点:线程不安全 原因:当两个线程同时去做singleton == null 判断的时候 结果都是null
 *         这样导致实例化两个对象。
 */
public class LazySingleton {
	private static LazySingleton singleton;

	private LazySingleton() {
	}

	public static LazySingleton getInstance() {
		if (singleton == null) {
			singleton = new LazySingleton();
		}
		return singleton;
	}
}

/**
 * 
 * @author DRJYY 单利模式之懒汉线程安全模式 特点:线程安全 因为加上synchronized 关键字
 *         加锁了。这样不会导致两个都实例化。保证只有一个 缺点:加锁的效率 不是很高。
 */
public class LazySafeSingleton {
	private static LazySafeSingleton instance;

	private LazySafeSingleton() {
	}

	public static synchronized LazySafeSingleton getInstance() {
		if (instance == null) {
			instance = new LazySafeSingleton();
		}
		return instance;
	}
}

/**
 * 单利模式之饿汉模式
 * 
 * @author DRJYY 特点:没有线程安全问题,但是类加载的时候 他就会实例化,不管你有没有使用到该实例。
 */
public class HungrySingle {

	private static HungrySingle instance = new HungrySingle();

	private HungrySingle() {
	}

	public static HungrySingle getInstance() {
		return instance;
	}
}

/**
 * 单利模式 静态内部类实现 同一个类加载器是线程安全
 * 
 * @author DRJYY 特点:看似也是先new 对象 但是他与饿汉模式区别是,饿汉类加载就开始实例化,这个虽然类加载了,但是new 对象操作
 *         放到静态内部类中, 这个需要外部去调用getInstance 才会实例化对象。达到懒加载效果。
 */
public class Singleton {
	private static class InnerSingleton {
		private static final Singleton INSTANCE = new Singleton();
	}

	private Singleton() {
	}

	public static final Singleton getInstance() {
		return InnerSingleton.INSTANCE;
	}
}

/**
 * 单利模式 双重校验锁
 * @author DRJYY
 *特点:首先线程安全,效率在第二种基础上有提高。因为 他在同步之前会有一个判断 ,这样就会过滤到不等于null 线程。
 */
public class DoubleLockSingleton {
	private volatile static DoubleLockSingleton singleton;

	private DoubleLockSingleton() {
	}

	public static DoubleLockSingleton getSingleton() {
		if (singleton == null) {
			synchronized (DoubleLockSingleton.class) {
				if (singleton == null) {
					singleton = new DoubleLockSingleton();
				}
			}
		}
		return singleton;
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蜗牛乌龟一起走

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值