单例设计模式的四种实现和各自的优缺点

一: 懒汉式

代码实现:

public class LazyManSingleTon{
	private LazyManSingleTon(){}
	private static LazyManSingleTon lmst;
	public static synchronized LazyManSingleTon getInstance(){
		if(lmst == null){
			lmst = new LazyManSingleTon();
		}
		return lmst;
	}
}

懒汉式优点: 使用时才会实例化, 不浪费内存空间, 无线程安全问题
懒汉式缺点: 使用同步锁, 效率低


二: 饿汉式

代码实现

public class HungryManSingleTon{
	private HungryManSingleTon(){}
	private static HungryManSingleTon hmst = new HungryManSingleTon();
	public static HungrtManSingleTon getInstance(){
		return hmst;
	}
}

**饿汉式优点: **不会出现线程安全问题
**饿汉式缺点: **在类加载时实例化, 需要额外占用内存空间


三: 静态内部类实现单例

代码实现

public class InnerClassSingleTon{
	private InnerClassSingleTon(){}
	public static InnerClassSingleTon getInstance(){
		return InnerClass.getInstance_in();
	}
	static class InnerClass{
		private static InnerClassSingleTon icst = new InnerClassSingleTon();
		private static InnerClassSingleTon getInstance_in(){
			return icst;
		}
	}
}

**静态内部类实现单例的优点: **在调用内部类时才会实例化对象, 不占用额外内存, 线程安全, 效率高


四: 双重验证饿汉式

代码实现

public class DoubleCheckLazyManSingleTon{
	private static DoubleCheckLazyManSingleTon dclmst;
	private DoubleCheckLazyManSingleTon(){}
	private static  DoubleCheckLazyManSingleTon getInstance(){
		if(dclmst == null){
			synchronized(DoubleCheckLazyManSingleTon.class){
				if(dclmst == null){
					dclmst = new DoubleCheckLazyManSingleTon();
				}
			}
		}
		return dclmst;
	}
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值