zoukankan      html  css  js  c++  java
  • java设计模式之-单例模式

    java设计模式之-单例模式

    什么是单例:单例就是在一个应用期间有且只有一个实例(不管有多少人调用它,拿到的实例都是同一个)。

    一、单例模式-饿汉式

    1 public class Singleton01 {
    2     private static final Singleton01 singleton = new Singleton01();
    3     //私有化构造
    4     private Singleton01() {}
    5     public static Singleton01 getSingleton() {
    6         return singleton;
    7     }
    8 }
     1 public class Singleton02 {
     2     private static Singleton02 singleton;
     3     static {
     4         singleton=new Singleton02();
     5     }
     6     private Singleton02() {}
     7     public static Singleton02 getSingleton() {
     8         return singleton;
     9     }
    10 }

    饿汉式非懒加载,也就是说饿汉式会在类加载的时候就实例化。但是不能否认的是如果该类中还有其他方法,而我们调用的是其他的方法且至始至终都没有调用过实例化好的单例,那实例化好的单例是多余的,不可避免的造成了内存的浪费。但是同样对于多线程来说,饿汉式是不需要考虑线程安全的,因为他们有且只能创建出一个单例,而不像懒汉式那样,会出现非单例的情况。

    二、单例模式-懒汉式

     1 public class Singleton03 {
     2     private static Singleton03 singleton;
     3     private Singleton03() {}
     4     public static Singleton03 getSingleton() {
     5         if(singleton==null)
     6             singleton=new Singleton03();
     7         return singleton;
     8     }
     9 }

    懒汉式与饿汉式相比,懒汉式是在方法内进行实例化对象的,只是多加了一重判断。而且这种方法在多线程条件下也同样可能出现多个实例的情况。出现这种情况的原因就是该线程是非安全的,那么有人一定会说加上线程同步锁。确实,线程同步锁可以解决上诉问题,但是同样的,线程同步同时也会带来效率低下的问题。所以我觉得线程同步还是摒弃掉吧

    三、静态内部类

     1 public class Singleton05 {
     2     
     3     private Singleton05() {}
     4     public static class ASingloten{
     5         private static final Singleton05 INSTANCE = new  Singleton05();
     6     }
     7     public static Singleton05 getSingleton() {
     8         return ASingloten.INSTANCE;
     9     }
    10 }

    这种方式和饿汉式有点类似,但是饿汉式并没有懒加载机制,他会在类加载的时候实例化。而静态内部类不会则不会在类加载的时候实例化,他会在调用的时候才去实例化。

    四、枚举实现

    1 public enum Singleton06 {
    2     INSTANCE;
    3     public void doSome() {
    4         //System.out.println(">>>>>>>>>>>>>>");
    5     }
    6 }

    枚举是在JDK1.5加入的,理论上讲枚举我们可以把它看成是静态常量,所以他可以避免多线程出现的特殊情况。枚举这种方式我还是比较推荐的

  • 相关阅读:
    HihoCoder 1638 : 小Hi的天平 (2-sat+并查集)
    阿里云安全肖力:云上数据安全体系建设的六要素
    MaxCompute客户端(odpscmd)在windows命令行下查询中文乱码问题处理实践
    序列化方案选型对比
    亚洲唯一,阿里云SLB位列Gartner全球网络负载均衡市场前五
    阿里云OSS同城冗余存储技术解析
    OSS跨同城3AZ重磅发布,构造全面数据保护体系
    阿里云OSS同城冗余存储正式商业化,提供云上同城容灾能力
    云原生应用 Kubernetes 监控与弹性实践
    GIAC2019 演讲精选 | 面向未来的黑科技——UI2CODE闲鱼基于图片生成跨端代码
  • 原文地址:https://www.cnblogs.com/Tiandaochouqin1/p/10963049.html
Copyright © 2011-2022 走看看