写出几种单例模式实现,懒汉模式和饿汉模式区别么
时间: 2024-04-22 17:28:03 浏览: 26
单例模式是一种设计模式,用于确保一个类只有一个实例,并提供全局访问点来获取该实例。以下是两种常见的单例模式实现:
1. 懒汉模式(Lazy Initialization):
```java
public class LazySingleton {
private static LazySingleton instance;
private LazySingleton() {} // 私有构造方法
public static synchronized LazySingleton getInstance() {
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
}
```
2. 饿汉模式(Eager Initialization):
```java
public class EagerSingleton {
private static final EagerSingleton instance = new EagerSingleton();
private EagerSingleton() {} // 私有构造方法
public static EagerSingleton getInstance() {
return instance;
}
}
```
懒汉模式和饿汉模式的区别在于初始化的时机和线程安全性:
- 懒汉模式是在首次调用getInstance()方法时才创建实例,因此是延迟初始化的。它在多线程环境下可能存在线程安全问题,需要在getInstance()方法加上同步关键字synchronized,以保证线程安全。但是加锁会导致性能下降。
- 饿汉模式在类加载时就创建了实例,因此是立即初始化的。它不存在线程安全问题,但可能会浪费一些内存空间,因为实例在任何时候都会被创建,即使没有被使用到。
需要根据具体的场景选择适合的单例模式实现。如果对性能有要求且可以提前创建实例,可以选择饿汉模式;如果对性能要求不高或者需要延迟实例化,可以选择懒汉模式。