zoukankan      html  css  js  c++  java
  • 两个单例小程序

    单例:通俗的说就是单个实例,不论啥时候都想获得同一份实例。

    第一种方式:

    package com.guohao.demo1;

    public class Danli1 {

    public static void main(String[] args) {
    MyDanLi demo1=MyDanLi.getDanLi();
    MyDanLi demo2=MyDanLi.getDanLi();
    System.out.println(demo1==demo2);

    }

    }
    class MyDanLi{
    private static MyDanLi instance=new MyDanLi();
    private MyDanLi(){}

    public static MyDanLi getDanLi(){
    return instance;
    }
    }

    输出:true

    第二种方式:

    package com.guohao.demo1;

    public class Danli2 {
    public static void main(String[] args) {
    MyDanLi2 demo3=MyDanLi2.getDanLi2();
    MyDanLi2 demo4=MyDanLi2.getDanLi2();
    System.out.println(demo3==demo4);
    }
    }
    class MyDanLi2{
    private static MyDanLi2 instance=null;
    private MyDanLi2(){}

    public static synchronized MyDanLi2 getDanLi2(){
    if(instance==null){
    instance=new MyDanLi2();
    }
    return instance;
    }
    }

    输出:true

    总结:单例中必须保证有一个private的构造方法,以此来保证不能从外部来new对象,只能通过get方法得到,并且不论什么时候调用这个方法,获得的实例(instance)都是同一份。

    注:第二种方式中synchronized 是防止产生两个instance。你比如:当一个线程进来走到if判断,刚判断完instance==null 这时想instance=new MyDanLi2();刚想new,但还没来得及new时,第二个哥们也走到if(instance==null)这里,于是第一个哥们new了,第二个哥们也new了,就有俩instance了。虽然第二个会把第一个覆盖,但是还是避免这种情况的好。

  • 相关阅读:
    网络七层模型
    datagaridview添加序号
    sqlserver查询数据库所有字段和表的关系
    Code Project精彩系列转
    操作不同线程中的控件
    PetaPoco数据读写并发时出错
    浮点型float数据强制转换成int整型
    PetaPoco微型ORM的使用错误记录
    EF出现基础提供程序在 Open 上失败
    Python中random模块
  • 原文地址:https://www.cnblogs.com/bjanzhuo/p/3576097.html
Copyright © 2011-2022 走看看