单例模式

单例模式

目录

image

定义:用来创建独一无二的,只能有一个实例的对象的入场券

作用:用于减少由于创建过多相同对象而造成的资源浪费

应用场景:常常用来管理共享资源,如数据库操作和线程池。

实现方法:

1,饿汉式

在创建变量的时候就将对象实例化,另外通过将构造器私有化来防止对象的重复创建。
优点:可以防止由于多线程操作所产生的操作
缺点:过早的创建对象可能会造成资源的浪费
public class Single {
    private static final Single single=new Single();
    private Single(){}
    public static Single getInstance(){
        return single;
    }
}

2,懒汉式

当需要的时候再创建对象
优点:当需要的时候再创建对象,防止的资源的浪费
缺点:可能会因为多线程的操作而产生错误
public class Single {
    private static  Single single;
    private Single(){};
    public static Single getInstance(){
    if(single==null){
         single=new Single();
     }
      return single;
    }
}
解决方法:
1,加上同步修饰符
优点:防止多线程所造成的的错误
缺点:每次调用getInstance()方法同步都会成为一种累赘
 public synchronized static  Single getInstance(){
    if(single==null){
        single=new Single();
    }
    return single;
}
2,双重锁定
优点:防止多线程所造成的的错误,还能降低同步所造成的累赘
缺点:volatile修饰符在1.4及更早版本中会使双重锁定失效
注意:volatile修饰符在这里是为了确保当single被创建为Single实例时,多个线程能够正确的处理single变量
public class Single {
private volatile static  Single single;
private Single(){};
public static  Single getIntance(){
    if(single==null){
        synchronized(Single.class){
            if(single==null){
                single=new Single();
            }
        }
    }
    return single;
}
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容