写出懒汉模式和饿汉模式
时间: 2024-05-08 07:14:50 浏览: 130
懒汉模式和饿汉模式都是单例模式的实现方式。
懒汉模式:在第一次调用获取实例的方法时,才实例化对象。在多线程环境下可能会出现线程安全问题,需要加锁或双重检查锁来保证线程安全。
示例代码:
```
public class LazySingleton {
private static LazySingleton instance = null;
private LazySingleton() {}
public static synchronized LazySingleton getInstance() {
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
}
```
饿汉模式:在类加载时就实例化对象,保证了线程安全,但可能会浪费一定的内存空间。
示例代码:
```
public class EagerSingleton {
private static EagerSingleton instance = new EagerSingleton();
private EagerSingleton() {}
public static EagerSingleton getInstance() {
return instance;
}
}
```
相关问题
Java写出懒汉式和饿汉式单例设计模式
懒汉式单例模式是在需要使用时才创建实例,而饿汉式单例模式则是在类加载时就创建实例。在Java中,懒汉式单例模式可以使用双重检查锁定来实现线程安全,而饿汉式单例模式则可以使用静态变量来实现。具体实现方式可以参考相关的Java编程书籍或网络资源。
写出几种单例模式实现,懒汉模式和饿汉模式区别么
单例模式是一种设计模式,用于确保一个类只有一个实例,并提供全局访问点来获取该实例。以下是两种常见的单例模式实现:
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,以保证线程安全。但是加锁会导致性能下降。
- 饿汉模式在类加载时就创建了实例,因此是立即初始化的。它不存在线程安全问题,但可能会浪费一些内存空间,因为实例在任何时候都会被创建,即使没有被使用到。
需要根据具体的场景选择适合的单例模式实现。如果对性能有要求且可以提前创建实例,可以选择饿汉模式;如果对性能要求不高或者需要延迟实例化,可以选择懒汉模式。
阅读全文