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

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

简介:这些类无论实例化多少都是一样的; 这些类在整个应用中同一时刻只有一个状态

目的:节省内存,减少GC消耗

总结:整个系统中只有一个实例存在

标准单例模式:

public class Persion{  private Persion(){};  public static Persion getInstance(){    return PersionSingleton.persion;  }  private static class PersionSingleton{    static Persion persion = new Persion();  }}

 

标准单例模式优点:

1,Persion只有一个实例
2,不会因并发产生多个实例
3,不会因JVM调优,出现还未正确初始化的实例

JVM创建对象步骤:

1,分配内存 //new
2,初始化构造器 //Persion()
3,将对象指向已分配的内存地址 //Persion persion =

反例1:

public class Singleton{
  private static Singleton singleton;  private Singleton(){};   public Singleton getInstance(){    if(singleton == null){ //判断null条件遇到并发问题,会出现多个实例化操作      singleton = new Singleton();    }    return singleton;  }}

 

反例2:

public class Singleton{
private static Singleton singleton; private Singleton(){}; public Singleton getInstance(){   if(singleton == null){     synchronized (Singleton.class){       if(singleton == null){         singleton = new Singleton(); //多线程情况下存在,第一个线程实例化释放锁后,第二个线程使用第一个线程实例化的对象会出现错误       } //因为第二个线程可能会使用到还没有完全创建好的实例(JVM内部调优会出现地址已分配但没有初始化的情况)     }   }   return singleton; }}

 

转载于:https://www.cnblogs.com/wanhua-wu/p/6428396.html

你可能感兴趣的文章
开始vscode的旅程
查看>>
BootStrap框架
查看>>
cocos2dx中的三种基本的数据类型
查看>>
Mysql 高级部分
查看>>
反射结合xml简单的模拟spring创建bean
查看>>
What's the #pragma pack
查看>>
监听器介绍
查看>>
4-10
查看>>
【HNOI2013】题解 bzoj3139~bzoj3144
查看>>
Zookeeper 集群如何高可用部署?
查看>>
html 标签的嵌套规则
查看>>
Android小试牛刀之1——对话框应用和SharedPeferences存储
查看>>
程序员吃自助餐后的反思
查看>>
PHP数组的操作
查看>>
xdebug php.ini 配置
查看>>
案例实操
查看>>
ApplicationContextAware接口的作用
查看>>
CSS3盒模型display:box详解
查看>>
JAVA中RSS解析器(rome.jar和jdom.jar)范例
查看>>
[Noi2010]Plane 航空管制 贪心
查看>>