• 单例模式- 实现方式


    单例模式是基础设计模式之一

    单例模式定义:

    单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。总之,选择单例模式就是为了避免不一致状态,避免政出多头。

    单例模式特点:

    1、单例类只能有一个实例。

    2、单例类必须自己创建自己的唯一实例。

    3、单例类必须给所有其他对象提供这一实例。

    单例模式:分饱汉式单例和饿汉式单例

    饱汉式单例

    public class  enumTest {
    private final static enumTest enumTest = new enumTest();
    private enumTest(){}

    /**
    * 饿汉式,类加载完成实例化,避免线程同步
    * @return
    */
    public static enumTest getInstance(){
    return enumTest;
    }
    }



    饿汉式单例:
    public class Test {
    private static Test test;
    private Test(){ }

    /**
    * 懒汉式 线程不安全(只能单线程使用,多线程,一个线程进入判断语句块,未来得及往下执行,另一线程也通过此判断语句,产生多个实例)
    *
    * @return
    */
    public static Test getInstance(){
    if(test == null) {
    test = new Test();
    }
    return test;

    }


    /**
    * 线程安全 懒汉式
    * 缺点:效率低 每个线程在想获得类的实例时候,执行此方法 都要进行同步
    * @return
    */
    public static synchronized Test getInstance1(){
    if(test == null){
    test = new Test();
    }
    return test;
    }



    /**
    * 双重检查 懒汉式(推荐使用)
    * 优点:线程安全,延迟加载,效率较高
    * @return
    */
    public static Test getInstance2(){
    if(test == null){
    synchronized(Test.class){
    if(test ==null){
    test = new Test();
    }
    }
    test = new Test();
    }
    return test;
    }
    }

    综上所述,推荐使用双重检查懒汉式单例模式 或 饱汉式单例模式(其实对内存的影响可以忽略不计)

  • 相关阅读:
    setAnimationTransition:forView:cache: 运行动画时背景色问题
    架构师速成4.6-软技能和硬技能
    Java获取某年某周的第一天
    openssl之BIO系列之12---文件描写叙述符(fd)类型BIO
    centos 使用 CP 命令 不提示 覆盖
    [3 Jun 2015 ~ 9 Jun 2015] Deep Learning in arxiv
    P1314 聪明的质监员
    P2858 [USACO06FEB]奶牛零食Treats for the Cows
    1163 访问艺术馆
    P1352 没有上司的舞会
  • 原文地址:https://www.cnblogs.com/zhangxiya/p/15394317.html
Copyright © 2020-2023  润新知