• 静态内部类实现 单例模式


    package model;

    public class MySingleTon {

    //1:饿汉 一旦完成加载,就把单例初始化完成,getInstance时已存在

    // private final static MySingleTon singleTon=new MySingleTon();
    //
    // private MySingleTon(){
    // System.out.println("starting init single");
    // }
    // public static MySingleTon getInstance(){
    // return singleTon;
    // }
    //
    // MySingleTon sinle1=MySingleTon.getInstance();
    // System.out.println("-------------");
    // MySingleTon sinle2=MySingleTon.getInstance();
    // System.out.println("-------------");
    // MySingleTon sinle3=MySingleTon.getInstance();
    //
    // 输出
    // starting init single
    // -------------
    // -------------

    //2 线程安全的 懒汉式 调用getInstance时 初始化实例

    // private static MySingleTon single=null;
    //
    // private MySingleTon(){
    //
    // }
    // public static MySingleTon getInstance(){
    // if(single==null){
    // synchronized (single) {
    // if(single==null){
    // single=new MySingleTon();
    // }
    // }
    // }
    // return single;
    // }

    //3 静态内部类实现单例

    // 至于1、2、3这三种实现又有些区别,
    //
    // 第一种:饿汉式在类创建的同时就实例化一个静态对象出来,不管之后会不会使用这个单例,都会占据一定的内存,但是相应的,在第一次调用时速度也会更快,因为其资源已经初始化完成,
    //
    // 第2种,在getInstance中做了两次null检查,确保了只有第一次调用单例的时候才会做同步,这样也是线程安全的,同时避免了每次都同步的性能损耗
    //
    // 第3种,利用了classloader的机制来保证初始化instance时只有一个线程,所以也是线程安全的,同时没有性能损耗,所以一般我倾向于使用这一种。

    private static class staticClassLazy{
    private static MySingleTon single=new MySingleTon();
    }
    private MySingleTon(){}
    public static MySingleTon getInstance(){
    return staticClassLazy.single;

    }

    }

  • 相关阅读:
    Linux环境下使用eclipse开发C++动态链接库程序
    例解 autoconf 和 automake 生成 Makefile 文件
    linux下编译boost
    在linux下如何编译C++程序
    windows和linux套接字中的select机制浅析
    看到关于socket非阻塞模式设置方式记录一下。
    MySQL批量执行sql文件
    Sqlcmd使用详解
    批量执行SQL文件
    SpringCloud微服务之跨服务调用后端接口
  • 原文地址:https://www.cnblogs.com/zhuyeshen/p/10998661.html
Copyright © 2020-2023  润新知