单例模式

本文介绍了Java中的单例模式,包括其核心要点、具体实现方法和使用场景。单例模式确保一个类只有一个实例,并提供全局访问点。文章讨论了懒汉式和饿汉式的实现,以及线程安全问题。同时,提到了单例模式的优缺点,如内存占用少、性能提升,但扩展性和适用场景有限。最后,展示了如何通过双检查锁机制实现线程安全的单例模式。
摘要由CSDN通过智能技术生成

单例模式的要点有三个:
一是某个类只能有一个实例;
二是它必须自行创建这个实例;
三是它必须自行向整个系统提供这个实例。
具体的实现方法:
一,是单例模式的类只提供私有的构造函数, 二,是类定义中含有一个该类的静态私有对象,
三,是该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象。
使用场景:
对象需要频繁的实例化和销毁,此时考虑使用单例可以大大的提高性能
优点:1.由于只有一个实例对象,所以占用内存很少
2.对象不用重复new了,当然于解放了对资源的重复占 用,提升了性能
缺点:1.扩展性差了,想扩展每次都得改代码
2.使用的场景比较单调,如果是在多场景不断变化的实例对象最好不要使用单例,数据容易出问题
3.最好不要用到连接池那块,N多对象共享一个连接池,容易导致连接池溢出的

//单例模式-----懒汉式
public class SingleLton {
	private static SingleLton instance=new SingleLton02();
	  //私有化构造函数
	private SingleLton() {   }
	//提供静态方法,让外界通过类.方法名的方式调用方法来实例化
	//调用一次实例化一次
	public static SingleLton getInstance() {
		return instance;
	}	
}


//单例模式----饿汉式
//注:线程不安全模式:只可教学使用,否则会出现严重的安全问题
class Single {
	//私有化构造器
	private Single() {   }
	//提供静态化的实例
	private static Single instance;
	//不提供锁的安全机制,如果多线程调用时会出现重复使用的情况
	public static Single getInstance() {
		if(instance!=null) {
			instance=new Single();
		}
		return instance;
	}
}

//线程安全模式,提供了同步监视器来防止重用的情况
public class SingleLton {
	private static SingleLton instance;
     //私有化构造函数
	private SingleLton() {   }
	//DCL双检查锁机制
	//提供同步监视器(锁)来实现多线程的安全机制
	public static SingleLton getInstance() {
		if(null==instance) {
			synchronized (SingleLton.class) {//类锁
				if(null==instance) {
					instance=new SingleLton();
				}
			}
		}
		return instance;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值