博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单例模式
阅读量:6842 次
发布时间:2019-06-26

本文共 1216 字,大约阅读时间需要 4 分钟。

单例模式

目录

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;}}

转载地址:http://lhdul.baihongyu.com/

你可能感兴趣的文章
MaxCompute(ODPS)上处理非结构化数据的Best Practice
查看>>
想了解产品经理吗?---经典文章
查看>>
阿里云宣布 Serverless 容器服务 弹性容器实例 ECI 正式商业化
查看>>
monowall
查看>>
Kubernetes 如何打赢容器之战?
查看>>
转-MySQL服务添加到Windows系统服务中
查看>>
自己实现一个RDD,需要实现哪些函数或者部分?
查看>>
equals()的重写规则
查看>>
Android中使用抖动动画吸引来用户注意
查看>>
Java NIO基础剖析
查看>>
Debian6 下NFS 安装
查看>>
chmod命令
查看>>
编译安装LAMP
查看>>
南怀瑾谈睡眠养生:如何才能少睡不困?
查看>>
Linux下面搭建***服务器(pptp)
查看>>
Spring IOC笔记
查看>>
如何解决 homebrew 更新慢的问题
查看>>
磁盘配额满与用户权限的更改
查看>>
ORACLE 数据类型
查看>>
KeyMob移动广告聚合平台为开发者提供最全面的保障
查看>>