单例模式------静态内部类

本文详细介绍了单例模式中静态内部类方式的实现原理,利用类装载机制确保线程安全及延迟加载,提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

优缺点说明:
1) 这种方式采用了类装载的机制来保证初始化实例时只有一个线程。
2) 静态内部类方式在Singleton6类被装载时并不会立即实例化,而是在需要实例化
时,调用getInstance方法,才会装载Singleton6Instance类,从而完成Singleton6的
实例化。
3) 类的静态属性只会在第一次加载类的时候初始化,所以在这里,JVM帮助我们
保证了线程的安全性,在类进行初始化时,别的线程是无法进入的。
4) 优点:避免了 线程不安全,利用静态内部类特点实现延迟加载,效率高
5) 结论:推荐使用.

代码实现:

package com.it.singleton;

/*双重检查(线程安全)*/
public class Singleton6 {


    /*私有的构造器,外部不能new对象实例*/
    private Singleton6(){

    }

    /* 创建私有静态内部类,有一个静态属性Singleton6
     * 在外部类被装载时静态内部类并不会别装载
     * 静态内部类不会自动初始化,只有调用静态内部类的方法,静态域,或者构造方法的时候才会加载静态内部类
     * 且静态内部类在装载时是线程安全的
     */
    private static class Singleton6Instance{
        /*static final修饰的属性表示一旦给值,就不可修改,并且可以通过类名访问。*/
        private static final Singleton6 INSTABCE = new Singleton6();
    }


    /*
     *   提供一个静态公有方法,当使用Singleton6Instance.INSTABCE,静态内部类才开始装载
     * */
    public static Singleton6 getInstance(){
        return Singleton6Instance.INSTABCE;
    }
}

测试:

package com.it.singleton.test;

import com.it.singleton.Singleton6;

public class SingletonTest6 {

    public static void main(String[] args) {

        Singleton6 instance1 = Singleton6.getInstance();
        Singleton6 instance2 = Singleton6.getInstance();

        System.out.println(instance1 == instance2);//true 同一对象

        System.out.println(instance1.hashCode() == instance2.hashCode());//true

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值