Java单例模式的几种实现方式

Java单例模式的几种实现方式

在Java 中,单例类只能有一个实例,必须创建自己的唯一实例,单例类必须给所有其他对象提供这一实例。Java 单例模式有很多种实现方式,在这里给大家介绍单例模式其中的几种。分别是饿汉式,懒汉式,Double CheckLock实现单例,静态内部类。它们都有相互的优缺点。
适用场景

需要生成唯一序列的环境。
需要频繁实例化然后销毁的对象。
创建对象时耗时过多或者耗资源过多,但又经常用到的对象。
方便资源相互通信的环境。

选择

单例对象占用资源少,不需要延时加载,枚举好于饿汉。
单例对象占用资源多,需要延时加载,静态内部类好于懒汉式。

一. 饿汉式

线程安全,调用效率高,但是不能延时加载。

//实例化这个类
public class Singleton {
	private static final Singleton instance = new Singleton();
	// 私有化构造器
	private Singleton(){
	}	  	
	//创建静态工厂方法,让外部可以获取实例
	public static Singleton getInstance(){
		return instance;
	}
}

二. 懒汉式

线程安全,调用效率不高,但是能够延时加载。

//类初始化时,不初始化这个对象(延时加载,真正用的时候再创建)
public class Singleton {
	private static final Singleton instance;
	// 私有化构造器	
	private Singleton(){
	}	  
	
	//方法同步,调用效率低
	// 创建静态工厂方法 ,让外部可以获取实例
	
	public static synchronized Singleton getInstance(){
		if (instance == null) {
			instance = new Singleton();
		}
	}
}

三. Double CheckLock实现单例

Double CheckLock 双重锁判断机制(由于JVM底层模型原因,偶尔会出问题,不建议使用),是在懒汉式单例基础上发展而来的。


public class Singleton {
	private volatile static Singleton instance;  
	// 私有化构造器
	private Singleton(){	
	}		
	//静态工厂方法,双重锁判断机制
	public static Singleton newInstance(){
	if (instance == null) {
		synchronized (Singleton.class) {
			if (instance == null) {
				instance = new Singleton();
			}				
		}
    }
return instance;
   }
}

四.静态内部类
线程安全,调用效率高,可以延时加载。

public class Singleton {
	private static class fw{
		private static final Singleton instance = new Singleton();
	}
	// 私有化构造器
	private Singleton(){
	}	  
	   //静态工厂方法
	public static Singleton getstance(){
		return fw.instance;
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值