java单例模式的实现方法是什么

Java单例模式的实现方法有以下几种:懒汉式(Lazy Initialization):在第一次使用时才创建实例。线程不安全版本的懒汉式实现如下:public class Singleton {private static Singleton instance;private Singleton(){}public static Singleton getInstance(){if(instan

Java单例模式的实现方法有以下几种:

  1. 懒汉式(Lazy Initialization):
    在第一次使用时才创建实例。线程不安全版本的懒汉式实现如下:
public class Singleton {
    private static Singleton instance;

    private Singleton(){}

    public static Singleton getInstance(){
        if(instance == null){
            instance = new Singleton();
        }
        return instance;
    }
}

可以通过在getInstance()方法上加锁synchronized来实现线程安全的懒汉式单例模式,但是会影响效率:

public class Singleton {
    private static Singleton instance;

    private Singleton(){}

    public static synchronized Singleton getInstance(){
        if(instance == null){
            instance = new Singleton();
        }
        return instance;
    }
}
  1. 饿汉式(Eager Initialization):
    在类加载时就创建实例,线程安全。实现如下:
public class Singleton {
    private static Singleton instance = new Singleton();

    private Singleton(){}

    public static Singleton getInstance(){
        return instance;
    }
}

由于在类加载时就创建实例,因此无法实现延迟加载。

  1. 双重检查锁定(Double Checked Locking):
    在懒汉式的基础上,进行双重检查,确保线程安全且效率较高:
public class Singleton {
    private volatile static Singleton instance;

    private Singleton(){}

    public static Singleton getInstance(){
        if(instance == null){
            synchronized (Singleton.class){
                if(instance == null){
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

使用volatile修饰instance变量可以保证多线程环境下的可见性和有序性。

  1. 静态内部类(Static Inner Class):
    利用类的静态内部类来实现懒汉式的延迟加载和线程安全:
public class Singleton {
    private Singleton(){}

    private static class SingletonHolder{
        private static final Singleton INSTANCE = new Singleton();
    }

    public static Singleton getInstance(){
        return SingletonHolder.INSTANCE;
    }
}

静态内部类只有在第一次使用时才会被加载,从而实现了延迟加载。

  1. 枚举(Enum):
    使用枚举类来实现单例模式,可以保证线程安全和防止反射攻击:
public enum Singleton {
    INSTANCE;

    public void doSomething(){
        // do something
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/850737.html

(0)
派派
上一篇 2024-02-02
下一篇 2024-02-02

相关推荐

  • Oozie在大数据处理和分析中的应用场景有哪些

    数据工作流管理:Oozie可以用于管理和调度大数据处理工作流,包括数据抽取、转换、加载(ETL)、数据清洗、数据分析等任务。数据处理调度:Oozie可以用于调度Hadoop MapReduce作业、Apache Spark作业、Hive查询、Sqoop数据传输等任务,实现数据处理的自动化和高效化。数据质量管理:Oozie可以用于执行数据验证、数据校验、数据质量监控等任务,帮助保证数据的准确性和完整

    2024-03-26
    0
  • 手机有什么可以赚钱的(能在手机上挣钱的软件)

    1.首推今日头条app,它有三个版本:(1)今日头条(普通版),可以参加里面的答题赢红包活动,通过答题来抽取现金红包。(2)今日头条极速版,主要是刷金币赚钱,走路、吃饭、看视频都可以的金币。(3)今日头条大字版,它和极速版内容差不多但金币少很多。今日

    2021-10-12
    0
  • SpringBoot中找不到javax.servlet.filter怎么解决

    在Spring Boot中,如果找不到javax.servlet.filter类,通常是因为没有正确引入相关的依赖。可以按照以下步骤解决该问题:确保在pom.xml或build.gradle文件中添加了正确的依赖项。在Spring Boot中使用Servlet Filter,需要引入servlet-api或javax.servlet相关的依赖。例如,在pom.xml中添加以下依赖项:<depend

    2024-02-05
    0
  • 4p营销组合策略是什么(举例说明4p营销组合策略)

    4p营销组合策略是什么,举例说明4p营销组合策略内容导航:市场营销策略中最经典的4P营销组合策略包括什么是4P’s营销策略组合4p营销组合策略是什么如何透过4p营销组合看市场营销策略的有效性及改进策略一、市场营销策略中最经典的4P营销组合策略包括产品、价格、分销、促销宣传4p组合策略即产品(product)、价格(price)、渠道(

    2022-04-23
    0
  • 「php属于什么行业」PHP课程培训主要是干什么的针对哪些行业

    php属于什么行业,php的主要应用领域内容导航:php属于什么公司的php行业现在就业情况如何php属于什么专业PHP课程培训主要是干什么的针对哪些行业一、php属于什么公司的这个语言属于哪家公司开发维护的?现在是zend公司在1997年,任职于TechnionIIT公司的两个以色列程序设计师:ZeevSur

    2022-05-16
    0
  • lol符文天赋解析(英雄联盟符文天赋介绍大全)

    囧王者在赶着时间做了两集英雄联盟手游CG混剪,分别配上了英雄联盟端游的S8《Rise登峰造极境》和S2的战歌《SilverScrapes》之后,发现这两首歌曲配上手游的CG,异常的合拍。有兴趣的小伙伴,可以去看看。今儿,咱们再来接着讲另外一名看似上

    2021-08-28 技术经验
    0

发表回复

登录后才能评论