C# 懒汉式和饿汉式的区别是什么?
时间: 2024-09-20 19:15:59 浏览: 49
C#中的懒汉式(Lazy Initialization)和饿汉式(Eager Initialization)单例模式的主要区别在于实例化单例对象的时间点。
**懒汉式**[^1]:
在懒汉式实现中,如`SingletonLh`类所示,单例对象是在第一次请求时才创建的。这是通过检查`lh`变量是否为`null`来决定是否创建新实例。这种方式保证了线程安全,但可能会有性能损失,因为它每次请求都会检查并可能创建新的对象。
```csharp
if (lh == null)
{
lh = new SingletonLh();
}
```
**饿汉式**[^2]:
相比之下,饿汉式在类装载时就完成了单例对象的实例化,无论何时首次请求,它都已经存在。这样可以避免同步问题,提高效率,但在多线程环境中,如果不做额外的同步措施,可能会导致多个实例被创建。
```java
private static Singleton instance = new Singleton(); // 在类加载时即初始化
public static synchronized Singleton getInstance()
{
return instance;
}
```
总结来说,懒汉式适合对延迟加载不敏感且不需要频繁访问的情况,而饿汉式则更适合对性能要求较高,且需要快速访问单例的场景。然而,实际选择应考虑应用的具体需求和上下文环境。
阅读全文