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枚举数据类型实现单例模式

你可能感兴趣的:(单例模式,java,开发语言)