java 单例模式

所谓的饱汉模式就是指:我们在其他线程想来获取实例化对象的时候,我们早就把这个对象的实例保存在内存中了。
代码如下:

private SingleThread(){}
private static SingleThread instance = new SingleThread();//饱汉模式
public static SingleThread getInstance(){
return instance;
}


所谓的饿汉模式就是指:只有刚开始的时候,我们并没有把对象实例化到内存中,而是要等到其他线程来调用的时候才实例化对象,并且以后就一直在内存中维持一份就OK了。
代码如下:

private SingleThread(){}
private static SingleThread instance = null;//饿汉模式
public static synchronized SingleThread getInstance(){
if(instance==null){
instance = new SingleThread();
}
return instance;
}


所谓的双重校验模式:鉴于饿汉模式中,每次的线程调用都要使用synchronized来做一次线程同步,这个开销对于我们的一些大型的分布式应用来说,是不希望出现这种情况的。比如淘宝这样大型的电子商务网站,恨不得消费者对应用的每次操作都立马得到响应,哪怕是提供几毫秒,对淘宝收入都是很大的响应。所以事实上饿汉模式中,我们只需要在第一次调用的时候来加锁,其他时候,我们就可以直接来判断实例是否为空就可以了:
代码如下:

private SingleThread(){}
private static SingleThread instance = null;//双重校验模式
public static SingleThread getInstance(){
if(instance==null) {
synchronized (SingleThread.class) {
if(instance==null){
instance = new SingleThread();
}
}
}
return instance;
}


如何选择的话,看具体的应用,但总的来说双重校验模式比较受欢迎。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值