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;

    }

    }

  • 相关阅读:
    C#中get和set的写法
    FineUI中Newtonsoft.Json版本报错解决办法
    ExtAspNet和FineUI未将对象引用设置到对象的实例
    【转载】写runat="server"有什么用
    (object sender,EventArgs e)是什么?
    【转载】onclick与onCommand的区别
    简单总结------redis
    将list等分成n份
    将List 分成n个长度由调用者指定的子List
    CountDownLatch 我的应用场景
  • 原文地址:https://www.cnblogs.com/zhuyeshen/p/10998661.html
Copyright © 2011-2022 走看看