千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:哈尔滨千锋IT培训  >  技术干货  >  什么是单例模式?有几种

什么是单例模式?有几种

来源:千锋教育
发布人:wjy
时间:2023-06-20 13:26:18

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

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

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

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

 

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

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

什么是单例模式?有几种

2023-06-20

抖音买1000粉会封吗?那些短视频运营你不得不知道的事情

2023-04-20

做短视频你不得不知道的事情之抖音流量池分配规则

2023-04-20

最新文章NEW

抖音发日常和作品有什么不一样

2023-04-19

mysql和mariadb有什么区别

2023-03-17

CSS选择器的权重如何判断?

2023-02-10

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>