单例模式

简介: 单例模式目录image定义:用来创建独一无二的,只能有一个实例的对象的入场券作用:用于减少由于创建过多相同对象而造成的资源浪费应用场景:常常用来管理共享资源,如数据库操作和线程池。

单例模式

目录

img_6eabbdd60893732784efebc0999bbb68.png
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;
}
}
目录
相关文章
|
1月前
|
设计模式 安全 Java
软件设计模式:单例模式
软件设计模式:单例模式
|
3月前
|
C++
【C++ 单例模式】
【C++ 单例模式】
|
4月前
|
安全 C++
C++单例模式
C++单例模式
30 1
|
4月前
|
设计模式 安全
【单例模式】—— 每天一点小知识
【单例模式】—— 每天一点小知识
|
存储 安全 调度
单例模式的简单介绍
单例模式的简单介绍
|
设计模式 缓存 JSON
没那么简单的单例模式
没那么简单的单例模式
112 0
没那么简单的单例模式
|
设计模式 安全 前端开发
关于单例模式,你应该了解这些
关于单例模式,你应该了解这些
关于单例模式,你应该了解这些
|
设计模式 数据库 Python
|
数据采集 设计模式 算法
大佬,人人都说精通的单例模式,你精通了吗
大佬,人人都说精通的单例模式,你精通了吗
69 0
大佬,人人都说精通的单例模式,你精通了吗
|
安全 Java 容器
单例模式的应用(3)
单例模式的应用(3)
145 0

热门文章

最新文章