java多线程-单例模式与多线程

立即加载(饿汉模式)

立即加载是指使用类的时候已经将对象创建完毕


延迟加载(懒汉模式)

延迟加载是指调用get()方法时实例才被工厂创建


延迟加载(懒汉模式)的缺点

多线程的时候可能会导致建立多个对象,而非单例模式


延迟加载(懒汉模式)的解决方案

  1. 声明synchronized关键字
  2. 尝试使用同步代码块
  3. 针对某些重要代码进行单独同步
  4. 使用DCL(Double-Check Locking,双检查锁)机制来实现多线程环境中的延迟加载单例模式
  5. DLC使用volatile的必要性(防止代码重排序)

使用静态内置类实现单例模式

public class MyObeject{
	private static class MyObjectHandler{
		private static MyObject myObject = new MyObject();
	}
	
	private MyObject(){
	}

	public static MyObject getInstance(){
		return MyObjectHandler.myObject;
	}
}

序列化和反序列化的单例模式实现

在反序列化时使用readResolve()方法,对原有的MyObject对象进行复用


使用static代码块实现单例模式

public class MyObeject{
	private static MyObeject instance = null;
	
	private MyObject(){
	}

	static{
		instance = new MyObeject();
	}

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

使用Enum枚举数据类型实现单例模式

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值