Java设计的单例模式(三种写法)

最近在一些博客上面看到的单例模式,无一例外都是饿汉和懒汉,这两个确实是单例模式,但是各有自己的弊端

先上代码吧

//饿汉式
class ClassA{
	private static final ClassA instance = new ClassA();
	public static ClassA newInstance(){
		return instance;
	}
	private ClassA(){}
}

//懒汉式
class ClassB{
	private static ClassB instance = null;
	public static synchronized ClassB newInstance(){
		if (instance == null) instance = new ClassB();
		return instance;
	}
	private ClassB(){}
}

不管饿汉式还是懒汉,都有自己的弊端。
一般用到单例模式的对象,都是比较占用内存。饿汉在类加载的时候,就创建了对象,在实际开发中,特别占用内存;懒汉虽然没有在类加载的时候创建对象,但是效率极低,毕竟有synchronized加锁,在现在多线程的时候,效率自然而然就降低了,下面分享一个两全其美的办法

class ClassC{
	private static class Holder{
		static ClassC instance = new ClassC();
	}
	public static ClassC newInstance(){
		return Holder.instance;
	}
	private ClassC(){}
}

这个方法,利用了静态内部类,这样,在类加载的时候并不会加载静态内部类,而且也完美的解决的多线程并发的问题(因为静态内部类只会在创建一次)。

第一次写博客,如果有什么不对的地方请在回复指教。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值