Java单例模式浅谈

设计模式这块一直是自己薄弱之处,常用的无非是单例模式和简单工厂模式。前不久去面试,当被问到为什么要用单例模式时,却用了单例模式的优点来做答,结果可想而知,后面又重新看了下单例模式,又加深了其了解,这里记下以共享。
之所以用单例模式,主要是由于某些特殊场景只能存在一个实例,例如一些计数,或如一些排号等。单例模式的优点是内存占用相对少,因为系统只存在一个实例。
我们一般会像以下这样写出单例模式:

public class Singleton {
private static Singleton instance = null;

private Singleton() {}

public static Singleton getInstance() {
if (null == instance) {
instance = new Singleton();
}
return instance;
}
}


后在网上看到说是这种写法当在多线程并发的情况下,就有可能会创建出多个实例,解决办法有多种,一种是在声明实例时进行初始化,一种是对获取实例方法加上synchronized:

public class Singleton {
// 方法一
private static Singleton instance = new Singleton();
private Singleton() {}

// 方法二
public synchronized static Singleton getInstance() {
return instance;
}
}

初始化instance,由于前面有了static关键字,保存了这一行代码只会执行一次,下面的获取实例getInstance方法加了同步关键字synchronized解决了并发问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值