Java设计模式之单例与双重锁定

有时候我们需要使用某些工具类,但是每次都要调用new,不但麻烦而且耗内存。那么我们怎么样优化一下呢?

在java设计模式之中有一种设计模式叫做单例,顾名思义就是只有一个实例。
那么我们往下看到底怎么样才可以做到单例呢?

首先要把工具类的构造方法定为私有,并且只能通过get方法得到此类的实例,而且要把此get方法定为静态,不然就没意思啦
public class Util{
private static Util util;
private Util(){
}

public static  Util getInstance(){
if(util==null){
util=new Util();
}
return util;
}

public void printLog(String msg){
Log.i(msg);
}

}

看~这么一改调用起来就方便多了只需要调用Util.getInstance();就可以得到实例了,然后通过此实例就可以调用方法printLog()。既方便又节约内存。


但是这样写只合适单线程使用,如果在多线程的情况下就有可能会重复new几个Util对象了,那么我们接下来就对Util类改造。

怎么改呢?我们使用双重锁定:
public class Util{
private static Util util;
private Util(){
}

public static  Util getInstance(){

if(util==null){
synchronized (Util.class){
if(util==null){
util=new Util();
}
}

}
return util;
}

public void printLog(String msg){
Log.i(msg);
}<span style="font-family: 微软雅黑;">}</span>

通过双重判断使得只有util为空的时候才去new一个对象,而且用 synchronized  锁住了new的方法使得只有一个线程可以调用new方法。

以上代码都是笔者直接在博客上写没有通过编译器测试~所以有时候会写错字母或者少写了个括号~



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值