zoukankan      html  css  js  c++  java
  • java基础——java内存,两种单例模式

    /*     
     * java运行内存:
     *     堆(heap):存储的全是对象,每个对象都包含一个与之对应的class信息
     *                只有一个heap,被所有线程共享,heap中不存放基本数据类型和对象引用,只放对象本身
     *     栈:每个线程都有属于自己的栈(用户态栈),栈中保存基本数据类型的对象和自定义对象的引用,这个引用指向了堆区的实例
     *     方法区(静态区):被所有线程共享,包含所有的class和static变量
     *                  包含整个程序中永远唯一的元素,即class,static变量
     * 
     * 
     * 如何确定一个属性,方法要确定为static
     *     属性:可以被多个对象共享,不会随着对象不同而不同
     *     方法:操作静态属性的方法
     *          工具类中的方法,习惯上申明为static.比如:Math,Arrays,Collections
     * */

    单例模式

    /*
     *     单例模式
     *    对比:
     *    饿汉式:
     *        好处:线程安全
     *        坏处:加载时间长    
     *    懒汉式:
     *        好处:延迟创建
     *        坏处:线程不安全,创建对象时有并发 
     *
     *    常用单例模式场景:
     *        网站计数器,应用程序的日志应用,数据库连接池,读取配置文件类
     *        Application,任务管理器,回收站
     * */

    饿汉式,随着类被加载时就new

    /*
     * 1.饿汉式:一开始就new出来
     * */
    class Bank{
        //1.私有化构造器
        private Bank() {}
        
        //2.内部创建类的静态对象
        private static Bank instance = new Bank();
        
        //3.提供static公共方法,返回类对象
        public static Bank getInstance() {
            return instance;
        }
    }

    懒汉式

    /*
     * 2.懒汉式:什么时候要用什么时候再造
     * */
    class Order{
        //1.私有化构造器
        private Order() {}
        
        //2.声明当前类静态对象,没有初始化
        private static Order instance = null;
        
        //3.声明public static的返回当前类对象的方法
        public static Order getInstance() {
            if(instance == null)
                instance = new Order();
            return instance;
        }
    
    }
  • 相关阅读:
    查缺补漏中~~
    The number of divisors(约数) about Humble Numbers
    Octorber 21st
    素数回文
    盐水的故事
    居然因为交换错了好几把。。。。,还有坑点是num1可以大于num2
    税收与补贴问题(洛谷1023)
    斐波拉契高精度(洛谷1255)
    高精度模板
    Codeforces#373 Div2
  • 原文地址:https://www.cnblogs.com/zsben991126/p/12148167.html
Copyright © 2011-2022 走看看