文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java单例创建方式有哪些

2023-06-29 03:57

关注

本文小编为大家详细介绍“Java单例创建方式有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java单例创建方式有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

定义

单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)

使用场景

单例模式八种方式

饿汉式(静态常量)

代码

public class Singleton1 {    // 私有化构造方法    private Singleton1(){}    // 静态常量    private static final Singleton1 singleton1 = new Singleton1();    // 对外提供公共方法    public static Singleton1 getSingleton1(){        return singleton1;    }}

分析

饿汉式(静态代码块)

代码

public class Singleton2 {    // 私有化构造方法    private Singleton2(){}    private static final Singleton2 singleton2;    // 静态代码块    static {        singleton2 = new Singleton2();    }    // 对外提供公共方法    public static Singleton2 getSingleton2(){        return singleton2;    }}

分析

懒汉式(线程不安全)

代码

public class Singleton3 {    // 私有化构造方法    private Singleton3(){}    // 内部属性    private static Singleton3 singleton3;    // 对外提供公共方法    public static Singleton3 getSingletons(){        if(singleton3 == null){            singleton3 = new Singleton3();        }        return singleton3;    }}

分析

懒汉式(同步方法)

代码

public class Singleton4 {    // 私有化构造方法    private Singleton4(){}    // 内部属性    private static Singleton4 singleton4;    // 对外提供公共方法    public static synchronized Singleton4 getSingleton4(){        if(singleton4 == null){            singleton4 = new Singleton4();        }        return singleton4;    }}

分析

懒汉式(同步代码块)

代码

public class Singleton5 {    // 私有化构造方法    private Singleton5(){}    // 内部属性    private static Singleton5 singleton5;    // 对外提供公共方法    public static Singleton5 getSingleton5(){        if (singleton5 == null){            synchronized (Singleton5.class){                singleton5 = new Singleton5();            }        }        return singleton5;    }}

分析

双重检查锁方式

代码

public class Singleton6 {    // 私有化构造方法    private Singleton6(){}    // 内部属性    private volatile static Singleton6 singleton6;    // 对外提供公共方法    public static Singleton6 getSingleton6(){        if (singleton6 == null){            synchronized (Singleton6.class){                if(singleton6 == null){                    singleton6 = new Singleton6();                }            }        }        return singleton6;    }}

分析

静态内部类方式

代码

public class Singleton7 {    // 私有化构造方法    private Singleton7(){}    // 内部类    private static class SingleInstance{        public static final Singleton7 singleton7 = new Singleton7();    }    // 对外提供公共方法    public static Singleton7 getSingleton7(){        return SingleInstance.singleton7;    }}

分析

枚举方式

代码

定义单例对象

public class Singleton {    public void hello(){        System.out.println("hello");    }}

定义枚举实例化单例对象

enum Singleton8 {    // 相当于public static final Singleton8 INSTANCE;    // 保证了枚举实例只能被实例化一次    INSTANCE;    // 定义单例变量    private Singleton singleton;    // 枚举构造方法,该构造方法是private,执行构造方法的时候,同时创建我们的单例对象    Singleton8() {        singleton = new Singleton();    }    // 对外提供公共方法    public Singleton getSingleton() {        return singleton;    }}

使用方法Singleton8.INSTANCE.getSingleton()即可获取我们的单例对象了

分析

读到这里,这篇“Java单例创建方式有哪些”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯