单例模式

单例模式

什么是单例模式:
单例是一种常见的设计模式。使用单例模式的类只能有一个实例。servlet就是单实例多线程的。

实现思路:
1,私有化构造器,不允许外部调用构造器实例化该类。
2,提供一个静态方法供外部获取实例。

具体实现:

懒汉式:

public class SingleTon {

private static SingleTon singleTon;

//私有化构造方法
private SingleTon(){}

//提供获取该实例的静态方法
public static SingleTon getInstance(){
    //判断是否实例化
    if(singleTon == null){
        singleTon = new SingleTon();
    }
    return singleTon;
}

}

不足:
多线程中不能保证单实例。

饿汉式:

public class SingleTon {

//私有化构造方法
private SingleTon(){}

private final static SingleTon singleTon = new SingleTon();

//提供获取该实例的静态方法
public static SingleTon getInstance(){
    return singleTon;
}

}

不足:
类加载的时候实例化该对象,如果没有使用到该实例会浪费内存。

synchronized修饰方法实现同步:

public class SingleTon {

private static SingleTon singleTon;

//私有化构造方法
private SingleTon(){}

//提供获取该实例的静态方法
public static synchronized SingleTon getInstance(){
    //判断是否实例化
    if(singleTon == null){
        singleTon = new SingleTon();
    }
    return singleTon;
}

}

不足:
使用synchronized 修饰方法,可以实现线程同步。但是每个需要获取该实例的线程都要排队,影响性能,可以更加细粒度(缩小synchronized 的范围)的使用synchronized 。

synchronized修饰代码块实现同步:

public class SingleTon {

private static SingleTon singleTon;

//私有化构造方法
private SingleTon(){}

 //提供获取该实例的静态方法
public static SingleTon getInstance(){
    if(singleTon == null){
        synchronized(SingleTon.class){
            if(singleTon == null){
                singleTon=new SingleTon();
            }
        }
    }
    return singleTon;
}

}

除了这几种外,还有其他的实现方式,我目前水平有限也不太了解,等学习之后再补上吧。

作者:我要坚持写博客
来源:优快云
原文:https://blog.youkuaiyun.com/hhdpk/article/details/85306821
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值