zoukankan      html  css  js  c++  java
  • java单例模式实现方式

    Singleton 模式要求一个类有且仅有一个实例,并提供一个全局访问点。

    Singleton模式 是一种职责型模式。因为我们创建了一个对象,这个对象扮演了独一无二的角色,在这个单独的对象实例中,它集中了它所属类的所有权力,同时它也肩负了行使这种权力的职责!

    1.三种实现方式:饿汉式、懒汉式、IoDH,

     a.饿汉式在类加载时就进行实例化,无需考虑线程的操作,却占用容器,浪费资源

     b. 懒汉式 在静态方法中实例化,需要考虑多线程操作,需要加同步锁的状态

     c IoDH  定义一个内部类初始化对象  既能延迟初始化,又能保证线程安全,最优单例模式实现方式

    2.主要应用场景

      windows 任务管理器、垃圾回收站、网页计数器、web配置初始化、数据源配置,线程池控制

    3. 可能存在问题

      java的垃圾回收机制对长时间不用的系统会进行自动回收,会造成单例模式的状态丢失

    public class EagerSingleClass {
    private final EagerSingleClass eager = new EagerSingleClass();

    private EagerSingleClass() {

    }
    /**
    * 饿汉式单例模式在类加载时就初始化,不必考虑线程 ,但会占用容器,从资源利用角效率来讲不如懒汉式
    * * @author Yang Xue 2014年12月2日
    * @return
    */
    public EagerSingleClass getInstance(){
    return eager;
    }


    public EagerSingleClass getINstanceClass(){
    return GetEagerSingle.eagerSingleClass;
    }

    /**
    * Initialization on Demand Holder (IoDH)
    * @author wb-yangxue.yx
    * 实现延迟加载,又可保证线程安全,最优单例模式
    * @version $Id: EagerSingleClass.java, v 0.1 2014年12月2日 上午10:46:24 wb-yangxue.yx Exp $
    */
    private static class GetEagerSingle{
    private static final EagerSingleClass eagerSingleClass=new EagerSingleClass();
    }
    }

    public class LazySingleClass {
    private volatile static LazySingleClass singleClass;

    private LazySingleClass() {

    }
    /**
    * 懒汉式双重锁定 同步里判断是为了避免多线程操作,双重锁定变量前需加volatile,
    * volatile 会屏蔽虚拟机内所做的一些列优化,导致系统运行效率降低
    * @author Yang Xue 2014年12月2日
    * @return
    */
    public static LazySingleClass getInstall() {
    if (singleClass == null) {
    synchronized (LazySingleClass.class) {
    if (singleClass == null) {
    singleClass = new LazySingleClass();
    }
    }
    }
    return singleClass;
    }
    }

  • 相关阅读:
    MyBatis 缓存机制
    MyBatis 动态SQL
    SpringMVC的简介与使用
    捕获组和前后查找
    正则表达式:( ) 小括号、[ ] 中括号、{ } 大括号的区别
    343.整数拆分
    74. 搜索二维矩阵
    数的划分
    213.打家劫舍||
    整数划分为k份
  • 原文地址:https://www.cnblogs.com/Snowflake/p/4136958.html
Copyright © 2011-2022 走看看