zoukankan      html  css  js  c++  java
  • 单例模式中的饿汉模式

    先看代码:

    package com.roocon.thread.t5;
    
    public class Singleton {
    
        private Singleton(){
    
        }
    
        private static Singleton instance = new Singleton();
    
        public static Singleton getInstance(){
           return instance;
        }
    }
    package com.roocon.thread.t5;
    
    public class Main {
    
        public static void main(String[] args) {
            Singleton s1 = Singleton.getInstance();
            Singleton s2 = Singleton.getInstance();
            Singleton s3 = Singleton.getInstance();
            Singleton s4 = Singleton.getInstance();
            System.out.println(s1);
            System.out.println(s1);
            System.out.println(s1);
            System.out.println(s1);
        }
    }

    运行结果:

    com.roocon.thread.t5.Singleton@5cad8086
    com.roocon.thread.t5.Singleton@5cad8086
    com.roocon.thread.t5.Singleton@5cad8086
    com.roocon.thread.t5.Singleton@5cad8086

    所谓的饿汉模式:不管是否使用到instance这个实例,我们都在创建的过程中就对它进行实例化。

    那么,饿汉模式是否会出现线程安全问题呢?

    出现线程安全问题需要满足三个条件:

    1.多线程的环境下

    2.必须有共享资源

    3.对资源进行非原子性操作

    根据以上代码,我们发现,使用饿汉式,在调动getInstance方法时,就只干了一件事,那就是返回Instance实例。这个操作是原子性操作。因此,饿汉式不存在线程安全问题。

    饿汉式的不足:不管是否需要使用到该实例,在创建的时候就已经实例化了。但其实在程序中根本没有用到该实例变量,就没必要先对它进行实例化。

    推荐是在使用它的时候才对它进行实例化,这就是所谓的懒汉式单例模式。

  • 相关阅读:
    常见动态规划题目详解
    回溯法常见题目总结
    AWK语法入门
    JavaScript深拷贝—我遇到的应用场景
    git代码版本回退
    Rem实现移动端适配
    Weex了解
    Vue.js入门学习
    今日小结—304状态码,数组去重
    js今日小结—Ajax、前端安全、GET&POST、闭包、HTTPS
  • 原文地址:https://www.cnblogs.com/sunnyDream/p/8011040.html
Copyright © 2011-2022 走看看