单例模式

单例模式

一个类只能创建一个实例化对象,为了保证只能创建一个对象,构造器私有化设置为private,外部不能创建对象,只能提供一个static修饰的公有化方法用于返回唯一的实例。

单例模式有哪些

饿汉式

1.私有化构造器

private Bank(){}

2.为内部提供一个当前类的实例

private static Bank bank = new Bank();

3.提供一个静态方法,返回唯一的对象

public static Bank getInstance(){	
	return bank;
}

懒汉式

1.创建一个私有化构造器

private Ordor(){};

2.为内部提供一个当前的实例

private static Ordor ordor = null;

3.提供一个静态方法,返回唯一对象

public static Ordor getInstance(){
	if(ordor = null){//如果还没有创建对象,就创建一个
		ordor = new Ordor();
	}
	return ordor;//如果之前创建过对象,就返回那个对象
}

由于懒汉式会出现线程安全处理,可以使用用synchronized包装处理

public class SafeSingleton {
	private static SafeSingleton singlenton = null;

	public static SafeSingleton getInstence(){
		if(singlenton == null){//双重检查锁定
			synchronized(SafeSingleton.class){
				if(singlenton == null){
					singlenton = new SafeSingleton();
				}  
			}
		}
		return singlenton;
	}
}

为什么要双层检查锁定?
答:假设有两个线程A和B,此时singlenton = null,当A拿了锁但还没创建对象时,B通过了第一个if判断,正在等待A归还锁,当A创建对象后,将锁归还,B进入第二个if判断,如果没有第二次检查,B将又会创造一个对象。

区别

饿汉式

1.天然线程安全
2.加载早,创建的对象在内存中存活时间过长(提前创建对象,但还没用,就占用内存)

懒汉式:

1.需要做线程安全处理
2.晚加载,需要的时候再创建对象(减少系统开销)

单例模式的使用场景

1.网站计数器
网站计数器只需要一个就够了‘-’
2.数据库连接池
3.读取配置文件的类
4.windows的资源管理器

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值