zoukankan      html  css  js  c++  java
  • 静态内部类实现 单例模式

    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;

    }

    }

  • 相关阅读:
    PlayMaker 不支持过渡条件
    Unity Inspector 给组件自动关联引用(二)
    C# 重载和默认参数(那种情况下使用更好)
    Unity 开发游戏编写代码的技巧
    C# Conditional特性避免 预处理命令泛滥使用
    在DirectX12中使用Texture
    再探Lua的require
    如何实现水下效果
    n个骰子的点数
    用DirectX12实现Blinn Phong
  • 原文地址:https://www.cnblogs.com/zhuyeshen/p/10998661.html
Copyright © 2011-2022 走看看