单例模式中的饿汉模式

Posted 凌晨六点半

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式中的饿汉模式相关的知识,希望对你有一定的参考价值。

先看代码:

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

运行结果:

 

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

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

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

1.多线程的环境下

2.必须有共享资源

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

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

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

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

 

以上是关于单例模式中的饿汉模式的主要内容,如果未能解决你的问题,请参考以下文章

java软件设计模式——单例设计模式中的饿汉式与 懒汉式示例

单例模式中的饿汉模式和懒汉模式一看就懂

Java基础 Runtime 用了单例模式中的饿汉式

单例模式

设计模式

单例模式的N种场景N种写法