iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java单例创建方式有哪些
  • 725
分享到

Java单例创建方式有哪些

2023-06-29 03:06:56 725人浏览 八月长安
摘要

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

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

    定义

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

    使用场景

    • 对于一些需要频繁创建销毁的对象

    • 重量级的对象

    • 经常使用到的对象

    • 工具类对象

    • 数据源

    • session

    单例模式八种方式

    饿汉式(静态常量)

    代码

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

    分析

    • 不会出现线程安全问题 JVM来帮我们保证了线程的安全性

    • 利用静态内部类的特点,效率也很高,

    • 实际开发中推荐使用的

    枚举方式

    代码

    定义单例对象

    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单例创建方式有哪些”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

    --结束END--

    本文标题: Java单例创建方式有哪些

    本文链接: https://www.lsjlt.com/news/322354.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • Java单例创建方式有哪些
      本文小编为大家详细介绍“Java单例创建方式有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java单例创建方式有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。定义单例设计模式,就是采取一定的方法保证在...
      99+
      2023-06-29
    • java创建bean的方式有哪些
      在Java中,创建bean的方式有以下几种:1. 手动创建:通过使用new关键字实例化一个对象,并为其设置属性值。```javaBe...
      99+
      2023-09-21
      java
    • java创建对象的方式有哪些
      在Java中创建对象的方式有以下几种:1. 使用 `new` 关键字:通过使用 `new` 关键字,可以实例化一个类,并在内存中分配...
      99+
      2023-09-13
      java
    • java创建线程的方式有哪些
      Java创建线程的方式有以下几种:1. 继承Thread类:定义一个继承自Thread类的子类,重写run()方法来定义线程的执行逻...
      99+
      2023-08-08
      java
    • Java线程的创建方式有哪些
      这篇文章主要讲解了“Java线程的创建方式有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java线程的创建方式有哪些”吧!1、Thread继承Thread类,并重写run方法class...
      99+
      2023-06-21
    • java中Stream的创建方式有哪些
      这篇文章将为大家详细讲解有关java中Stream的创建方式有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、通过集合Java 8的Collection接口被扩展,提供了两个获取流的方法:返回一个顺...
      99+
      2023-06-15
    • 在C#中创建单例的方法有哪些
      这期内容当中小编将会给大家带来有关在C#中创建单例的方法有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。第一种常见的方式创建单例: /// <summary> ...
      99+
      2023-06-09
    • java单例模式有哪些
      java中的单例模式有:1.懒汉式单例;2.饿汉式单例;3.登记式单例;java中的单例模式有以下几种懒汉式单例java中懒汉式单例是指单例类在第一次调用时进行实例化,不存在多线程同步问题,可以避免synchronized所造成的性能问题。...
      99+
      2024-04-02
    • java反射创建类的方式有哪些
      Java反射可以通过以下几种方式来创建类的实例:1. 使用Class类的newInstance()方法:该方法会调用类的无参构造方法...
      99+
      2023-09-07
      java
    • java创建多线程的方式有哪些
      Java创建多线程的方式有以下几种:1. 继承Thread类:创建一个类继承Thread类,并重写run()方法,然后创建该类的对象,调用start()方法启动线程。```javaclass MyThread extends Threa...
      99+
      2023-08-09
      java
    • java中创建文件的方式有哪些
      在Java中创建文件的方式有以下几种: 使用File类:可以通过File类的构造函数创建一个File对象,然后调用其createN...
      99+
      2024-03-04
      java
    • 创建RDD的方式有哪些
      这篇文章主要讲解了“创建RDD的方式有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“创建RDD的方式有哪些”吧!从集合中创建RDD val conf = new&nb...
      99+
      2023-06-02
    • java中线程池创建的方式有哪些
      本篇文章为大家展示了java中线程池创建的方式有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开...
      99+
      2023-06-14
    • java创建写入文件的方式有哪些
      本篇内容主要讲解“java创建写入文件的方式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java创建写入文件的方式有哪些”吧!在本文中大量的使用到了try-with-resources语...
      99+
      2023-07-04
    • 详解Java中的八种单例创建方式
      目录定义使用场景单例模式八种方式饿汉式(静态常量)饿汉式(静态代码块)懒汉式(线程不安全)懒汉式(同步方法)懒汉式(同步代码块)双重检查锁方式静态内部类方式枚举方式总结 定义 单例设...
      99+
      2024-04-02
    • Spring创建bean的方式有哪些
      这篇文章主要讲解了“Spring创建bean的方式有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring创建bean的方式有哪些”吧!环境Ubuntu 22.04IntelliJ ...
      99+
      2023-07-02
    • JavaScript创建对象方式有哪些
      这篇文章主要讲解了“JavaScript创建对象方式有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript创建对象方式有哪些”吧!1. 工...
      99+
      2024-04-02
    • java创建对象方法有哪些
      java中创建对象方法有:1.使用new关键字创建;2.使用Class类创建;3.使用构造函数创建;4.使用反序列化创建;java中创建对象方法有以下几种使用new关键字创建public class Test {public static ...
      99+
      2024-04-02
    • C# 创建单例的多种方式
      目录第一种常见的方式创建单例: 第二种方式创建单例:第三种方式创建单例:第四种方式创建单例:第五种方式创建单例:关于为什么需要创建单例?这里不过多介绍,具体百度知。 &nb...
      99+
      2024-04-02
    • 线程池的创建方式有哪些
      这篇文章主要讲解了“线程池的创建方式有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“线程池的创建方式有哪些”吧!什么是线程池线程池(ThreadPool...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作