`
bu_choreography
  • 浏览: 196841 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

单l例模式

阅读更多
这几天一直在学习设计模式,看到访问者模式有点不太理解,上javaeye搜索到兽王Rjx2008的博客,发现不少好东西。
先看了个常见的单例模式,刚接触设计模式买了本大话设计模式,讲到单例模式时关于多线程,用了双重检查锁DCL,不过在兽王的博客里对其否定了,来看看兽王是怎么讲解的吧。
不容易掌握的单例模式


小知识:单例模式有两种,饱汉、饿汉。顾名思义饿汉是饥不择食,强行创建,而饱汉则会挑挑食。
//饿汉式
Class A{

         private static A a=new A();

        private A(){}

       public A getA(){

            return   a;

      }

}

//饱汉式
class B{

    private static B b;

     private B(){}

     public B getB(){

           if(b!=null){

                return b;

             }else{

               b=new B();

              retrun b;

            }

    }

}



兽王对多线程情况下单例迷失应用的处理是:
 public class Singleton {  
   
      private Singleton(){  
            
     }  
      //静态内部类  
      static class SingletonInner{  
         static Singleton instance = new Singleton();  
      }  
             public static Singleton getInstance(){  
        return SingletonInner.instance;  
      }  
 }


原因:使用静态内部类!它是由一个叫Bob Lee的人写下来的(最初忘记了是哪两个人提出)。在加载singleton时并不加载它的内部类SingletonInner,而在调用 getInstance()时调用SingletonInner时才加载SingletonInner,从而调用singleton的构造函数,实例化 singleton,从而在不需要同步的情况下,达到延迟初始化的效果。 


文中的内容均是兽王Rjx2008的出品,链接
分享到:
评论

相关推荐

    STM32L051C8T6-STOP模式-按键、串口可唤醒

    在STOP模式下,可以通过配置中断或事件来唤醒MCU,这在本例中就是通过按键和串口实现的。 按键唤醒通常基于EXTI(外部中断)线路上的输入捕获。在进入STOP模式前,需要配置EXTI线路上的中断,并在唤醒后处理中断...

    stm8l多种例程代码

    由于STM8L系列主打低功耗特性,因此例程可能包含节能模式的切换,如空闲模式、掉电模式等,以延长电池寿命。 10. **错误处理**: 例程中通常会有错误检查和异常处理机制,如CRC校验、通信错误检测等,以保证系统...

    STM32L051定时器中断例程

    这些定时器可以工作在不同的模式,如自由运行模式、单脉冲模式、重复计数模式等,且具备比较单元和捕获单元,可用于脉宽调制(PWM)输出和输入信号的检测。 定时器中断是STM32处理时间事件的重要方式。当定时器的...

    STM8L低功耗模式

     STM8L系列的一大特点便是低功耗,以STM8L051F3为例,该型号MCU拥有5种低功耗模式,分别为Wait, Low power run, Low power wait, Active-halt with RTC, Halt等。其中Halt模式下功耗为最低,本篇也将详细讨论该模式...

    6-8 关系模式的分解.pdf

    以关系模式S-L(Sno,Sdept,Sloc)为例,其中Sno是学生编号,Sdept是系别,Sloc是宿舍位置。该关系模式中存在非主属性对码的传递函数依赖,即Sno→Sdept,Sdept→Sloc,因此S-L模式属于2NF。然而,S-L模式仍存在...

    遗传算法应用中遗传算法的模式理论.ppt

    在一个编码字符串中,存在多种模式,长度为l的二进制编码字符串上的模式总数为(2+1)^l,而在一个长度为m、规模为M的群体中,通常包含(2^m)^2种模式。模式的阶(Schema Order)表示模式中确定基因值的位置数,它决定...

    关于l298n的介绍资料

    - **驱动模式**:采用双H桥结构设计,能够独立控制两个电机的正转、反转以及停止状态。 #### 三、L298N引脚说明 L298N具有多个重要的引脚: 1. **IN1~IN4**:这四个引脚用于接收外部控制信号,通过组合不同的高低...

    HMC5883L驱动

    例如,可以选择连续测量模式以获得连续的数据流,或者选择单次测量模式以降低功耗。 2. **I2C或SPI通信**:HMC5883L支持两种通信协议,I2C更适合资源有限的系统,而SPI则能提供更高的数据传输速率。根据所使用的STC...

    基于STM8L152C6单片机双芯片指纹锁电路设计资料 包含原理图+PCB+相关开发文档

    这个单片机因其高效的能源管理、丰富的外设集和小巧的封装而广泛应用于各种低功耗应用,如智能家居、安防系统,以及本例中的指纹锁电路设计。 指纹锁电路设计是现代安全技术的一个重要应用,它利用人的生物特征——...

    模式识别经典例子

    本例涉及模式识别中的基本概念——类内散布矩阵(Sw)与类间散布矩阵(Sb)的计算。 **题目背景**: 设有三个类别样本集ω1,ω2和ω3,它们的先验概率相同,要求计算类内散布矩阵Sw和类间散布矩阵Sb。 **样本数据...

    DLINK_DNS320L(LW).1.08b08(3.07.0420.2016).zip

    升级过程通常包括下载最新固件文件(如本例中的"DLINK_DNS320L(LW).1.08b08(3.07.0420.2016)"),通过设备管理界面进行安装。在升级前,建议备份重要数据,以防意外情况。 总之,DNS-320L的v1.08b08固件升级不仅...

    EPSON L101废墨清零软件

    在本例中,提供的压缩包可能包含了该软件,文件名为“l100”。 2. **解压并运行**:下载完成后,解压缩文件,找到可执行程序,双击运行。 3. **选择打印机型号**:软件启动后,按照界面提示选择打印机型号为EPSON ...

    例说51单片机(C语言版)L298、ULN2003驱动2相可调速步进电机

    1. 初始化单片机:设置I/O口为输出模式,准备连接到L298和ULN2003的控制引脚。 2. 编写步进电机控制函数:定义步进电机的步进序列,即每个相位的通电顺序,以实现电机转动。 3. 设定速度控制:通过定时器设置脉冲...

    STM8L101f3p6定时器4按钮输入输出测试

    在本例中,定时器4将被配置为PWM(脉宽调制)模式或者简单的定时中断模式,用于控制LED的亮度或闪烁频率。 首先,要使用定时器4,需要在初始化阶段进行配置。这包括设置预分频器值,确定计数器的时钟频率。预分频器...

    vhdl_100例

    它允许设计者以行为、结构和混合模式来描述电子系统,广泛应用于 FPGA(Field-Programmable Gate Array)和 ASIC(Application-Specific Integrated Circuit)的设计。"vhdl_100例"这个资源很可能是为了帮助学习者...

    互联网 背景下国企采购电商化实践探析——以L公司为例.zip

    在当前的互联网时代,国有企业(以下简称“国企”)的采购模式正经历着深刻的变革,电商化采购成为一种趋势。本文将结合L公司的实践案例,深入探讨互联网背景下国企采购电商化的实施路径、挑战与应对策略。 一、...

    1.基础例程+STM32L431RCT6+LED闪烁实验.rar

    本实验以LED闪烁为例,旨在帮助初学者掌握STM32L431RCT6的基础使用和CUBEMX配置工具以及HAL库的运用。 **CUBEMX简介** CUBEMX是ST官方提供的一个配置工具,全称为STM32CubeMX。它简化了STM32微控制器的初始化过程,...

    MM32L0xx低功耗系列单片机IAP实验例程

    本实验以灵动微电子的MM32L0xx系列低功耗单片机,特别是MM32L073为例,来探讨如何实现IAP功能,并通过串口进行程序更新。MM32L0xx系列单片机因其高效能、低功耗的特性,被广泛应用于各种对电源要求严格的场合,且与...

Global site tag (gtag.js) - Google Analytics