java-单例笔记

来源:互联网 发布:淘宝能买到烟吗 编辑:程序博客网 时间:2024/05/17 01:58

0:懒汉式 忽略

1.饿汉式:  提前实例化            >>缺陷并不明显           我理解看来:并不是程序一运行  就实例化 占用内存的

public class Singleton                                                           实际是在类加载时才会实例化    也就是说 只有使用到该类时才会实例化
{                                                                                                         如Singleton.调用它    才会自动加载Singleton类
    private Singleton(){                                                                            并不是 在项目启动的时候就初始化     
       
    }   
  
    private static Singleton instance = new Singleton();                 

   //static {   } 静态块  效果跟这个是一样的                

   //变量和块  是按从上到下顺序加载
  
    private static Singleton getInstance(){   
        return instance;   
    }   

2.内部类式:  java类延迟加载机制

public class Singleton      
{         
    private Singleton(){}      
     
    private class SingletonHoledr(){                   

   // ->这边 不是static 故 不会在加载Singleton类的时候就   加载SingletonHoledr

 //只有当这个类被加载时 才会初始化这个变量
        private static Singleton instance = new Singleton();      
    }      
     
    private static Singleton getInstance(){      
        return SingletonHoledr.instance;      
    }      
}  

衍生分析:

Classloader的特性.         实际上如果没需要静态变量,函数,类加载   和饿汉式:  并不相差多少的.



3.枚举式

《Effective Java》作者推荐使用的方法,优点:不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象


4.双检索式 :当前的内存模型中无效  

可用来学习

一.关键字volatile    二.可用来运用思路   双检索


0 0
原创粉丝点击