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

    单例模式是一种比较简单的模式,其定义是ensure a class has only one intance ,and provide a global point of access to it .(确保某一个类只有一个实例,并自行实例化,并向整个系统提供这个实例)

    主要分为2种模式,饿汉式和懒汉式。

    package src;
    
    /**
     * 饿汉式
     * 
     * @author joke
     * 
     */
    public class Singleton {
        private static Singleton singleton = new Singleton();
    
        private Singleton() {
    
        }
    
        public static Singleton getInstance() {
            return singleton;
        }
    }

    上面这个模式可以解决在高并发场景下的线程不安全问题,还有一种模式是懒汉式,如下:

    package src;
    
    /**
     * 懒汉式
     * 
     * @author joke
     * 
     */
    public class Singleton1 {
        private Singleton1 singleton = null;
    
        private Singleton1() {
    
        }
    
        public Singleton1 getInstance() {
            if (singleton == null) {
                singleton = new Singleton1();
            }
            return singleton;
        }
    }

    在上述懒汉式的下,在高并发场景下在内存中出现多个实例,比如在线程A执行到singleton = new Singleton1(),还没有返回singleton的时候,另外线程B执行到 if (singleton == null) 时候,此时的判断为空的,此时内存中就会出现2个实例,为了解决此问题,我们一般会在getInstance()前加上关键字synchronized,但其仍不是优秀的单例模式,其代码如下:

    package src;
    /**
     * 解决线程不安全的懒汉式
     * @author joke
     *
     */
    public class Singleton1 {
        private Singleton1 singleton = null;
    
        private Singleton1() {
    
        }
    
        public synchronized Singleton1 getInstance() {
            if (singleton == null) {
                singleton = new Singleton1();
            }
            return singleton;
        }
    }

    单例模式的使用场景:

    1、要求使用唯一序列号的环境

    2、在整个项目中需要一个共享访问点或共享数据

    3、创建一个对象需要消耗资源过多时

    4、需要定义大量的静态常量和静态方法的环境(比如工具类)。

  • 相关阅读:
    RPC 在整个过程中,体现了逐层抽象,将复杂的协议编解码和数据传输封装到了一个函数中
    RPC 框架
    x86寄存器说明
    计算机组成原理—— 寻址方式--
    七种寻址方式(相对基址加变址寻址方式)---寄存器
    什么是寻址方式
    Intel寄存器名称解释及用途,%eax%ebx等都是什么意思
    CPU的内部架构和工作原理
    CPU工作流程
    8086内部寄存器
  • 原文地址:https://www.cnblogs.com/shawnblogs/p/4870456.html
Copyright © 2011-2022 走看看