全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货  >  详情

什么是单例模式?有几种

来源:千锋教育
发布人:wjy
2023-06-20

推荐

在线提问>>

  单例模式是一种设计模式,用于确保一个类只有一个实例,并提供全局访问该实例的方式。它常用于需要全局访问且只能存在一个实例的情况,例如数据库连接、线程池、配置对象等。

  在单例模式中,通过限制类的实例化过程,确保只能创建一个实例,并提供一个访问该实例的静态方法。

  常见的单例模式实现方式包括以下几种:

  1. 饿汉式(Eager Initialization):

  - 在类加载时就创建实例,并在类内部持有该实例的引用。

  - 线程安全,因为实例在类加载过程中就被创建。

  - 示例:

public class Singleton {
private static Singleton instance = new Singleton();

private Singleton() {
// 私有构造函数
}

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

 

  2. 懒汉式(Lazy Initialization):

  - 在第一次调用获取实例的方法时才创建实例。

  - 需要考虑线程安全问题,可以通过加锁等方式保证线程安全。

  - 示例:

public class Singleton {
private static Singleton instance;

private Singleton() {
// 私有构造函数
}

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

 

  3. 双重检查锁(Double-Checked Locking):

  - 在懒汉式的基础上进行改进,使用双重检查来减少锁的竞争,提高性能。

  - 示例:

public class Singleton {
private static volatile Singleton instance;

private Singleton() {
// 私有构造函数
}

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

 

  4. 静态内部类(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;
}
}

 

  以上是常见的几种单例模式的实现方式,每种方式都有其适用的场景和特点。选择适合的单例模式实现方式需要考虑线程安全性、性能需求和代码复杂度等因素。

相关文章

什么是单例模式?有几种

springbean生命周期分为几个阶段?

如何辨别java中的箭头函数和普通函数?

学习java需要什么基础?

如何定义和调用python中的函数?

开班信息 更多>>

课程名称
全部学科
咨询

HTML5大前端

Java分布式开发

Python数据分析

Linux运维+云计算

全栈软件测试

大数据+数据智能

智能物联网+嵌入式

网络安全

全链路UI/UE设计

Unity游戏开发

新媒体短视频直播电商

影视剪辑包装

游戏原画

    在线咨询 免费试学 教程领取