重学Java之单例模式--饿汉式

单例模式的典型特征:

  • 只有一个实例;
  • 构造器私有,禁止外部直接使用 new 来创建对象;
  • 对外提供获取实例的方法;

饿汉式单例:类一创建就直接 new 一个对象。
简单理解就是,很饿,食物一做好就吃(类一创建就new对象)。

好处:立即创建,线程安全。
不足:创建的时候占用内存资源,后期没使用的话就造成资源浪费了。

package single;

import java.util.Arrays;

//饿汉式单例
public class Hungary {

    /**
     * 饿汉式,类加载的时候就直接 new 一个,
     * 占用内存空间
     * */
    private static Hungary hungary = new Hungary();

    //构造器私有
    private Hungary(){
        System.out.println(Thread.currentThread().getName() + ", " + toString());
    }

    public static Hungary getInstance(){
        return hungary;
    }
}

验证下:

1.单线程:

package single;

import java.util.Arrays;

//饿汉式单例
public class Hungary {

    /**
     * 饿汉式,类加载的时候就直接 new 一个,
     * 占用内存空间
     * */
    private static Hungary hungary = new Hungary();

    //构造器私有
    private Hungary(){
        System.out.println(Thread.currentThread().getName() + ", " + toString());
    }

    public static Hungary getInstance(){
        return hungary;
    }

    public static void main(String[] args) {
        //单线程
        for (int i = 0; i < 5; i++){
            Hungary.getInstance();
        }

        //多线程
        /*for (int i = 0; i < 5; i++){
            new Thread(new Runnable() {
                @Override
                public void run() {
                    Hungary.getInstance();
                }
            }).start();
        }*/

    }
}

运行结果:

main, single.Hungary@4554617c

2.多线程

package single;

import java.util.Arrays;

//饿汉式单例
public class Hungary {

    /**
     * 饿汉式,类加载的时候就直接 new 一个,
     * 占用内存空间
     * */
    private static Hungary hungary = new Hungary();

    //构造器私有
    private Hungary(){
        System.out.println(Thread.currentThread().getName() + ", " + toString());
    }

    public static Hungary getInstance(){
        return hungary;
    }

    public static void main(String[] args) {
        //多线程
        for (int i = 0; i < 5; i++){
            new Thread(new Runnable() {
                @Override
                public void run() {
                    Hungary.getInstance();
                }
            }).start();
        }
    }
}

运行结果:

main, single.Hungary@4554617c

你可能感兴趣的:(Java,设计模式,java,设计模式,单例模式,饿汉式)