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;
    }
    }

  • 相关阅读:
    Java的Socket通信----通过 Socket 实现 TCP 编程之多线程demo(2)
    MySQL 数据备份与还原
    java实现时钟方法汇总
    java实现二叉树demo
    java实现心型、99乘法demo
    显示本月日历demo
    打开图片并显示在面板上demo
    ArraySort--冒泡排序、选择排序、插入排序工具类demo
    类的实例化顺序
    StringsUtil字符串工具类---灵活截取
  • 原文地址:https://www.cnblogs.com/Snowflake/p/4136958.html
Copyright © 2011-2022 走看看