线程安全的单例模式

看别人的博客有感,结合公司的项目想了下,目前在公司项目里常用的线程安全单例模式是这么写的:

public class Hxy{

	private static Hxy hxy = new Hxy();

	private Hxy(){
	}
	
	public static Hxy getInstance(){
  		return hxy;
	}
	
}

没有使用同步锁,同样多线程安全,这看起来的话公司的这种写法在类加载的时候就会new一个对象出来,有大量的类是这么写的话,理论上这会使得在启动的时候变慢。

多线程安全单例的第二种写法,使用同步锁:

public class Hxy{

	private static Hxy instance = new Hxy();

	private Hxy(){
	}

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

如果使用双重同步锁的话写法就有点麻烦了:

public class Hxy{

	private static Hxy instance = new Hxy();

	private Hxy(){
	}

	public static Hxy getInstance(){
  		if(null == instance){
  			synchronized(Hxy.class){
  				if(null == instance){
  					instance = new Hxy();
  				}
  			}
  		}
  		return instance;
  	}
}

文章说java里使用枚举作为单例类是最简单的方式来创建线程安全单例模式的方式,我来模仿下:

public class HxyFactory{

	private enum HxyEnum{
		singleFactory;
		private Hxy instance;
		HxyEnum(){
			instance = new Hxy();
		}

		public Hxy getInstance(){
			return instance;
		}
	}

	public static Hxy getInstance(){
		return HxyEnum.singleFactory.getInstance();
	}
}


class Hxy{
	public Hxy(){
	}
}

折腾下就好了,其实我还是喜欢怎么简单怎么来,哈。

转载于:https://my.oschina.net/110NotFound/blog/3005713

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值