java 单例模式 饿汉懒汉
时间: 2023-08-30 08:08:24 浏览: 135
Java单例模式的知识点详解
单例模式是一种设计模式,用于确保一个类只有一个实例,并提供一个全局访问点。
在Java中,单例模式有两种常见的实现方式:饿汉模式和懒汉模式。
1. 饿汉模式(Eager Initialization):
在饿汉模式中,实例在类加载时就被创建,无论是否使用该实例。具体实现如下:
```java
public class Singleton {
private static final Singleton instance = new Singleton();
private Singleton() {
// 私有构造函数
}
public static Singleton getInstance() {
return instance;
}
}
```
优点:实现简单,线程安全。
缺点:如果该实例在程序运行期间很少被使用,会造成资源浪费。
2. 懒汉模式(Lazy Initialization):
在懒汉模式中,实例在第一次使用时才被创建。具体实现如下:
```java
public class Singleton {
private static Singleton instance;
private Singleton() {
// 私有构造函数
}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
```
优点:延迟加载,只在需要时才创建实例。
缺点:线程安全需要额外的同步开销,可能会引起性能问题。
需要注意的是,在多线程环境下,懒汉模式需要考虑线程安全性,可以使用双重检查锁定(Double-Checked Locking)或静态内部类实现来解决。
双重检查锁定(Double-Checked Locking):
```java
public class Singleton {
private volatile static Singleton instance;
private Singleton() {
// 私有构造函数
}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
```
静态内部类实现:
```java
public class Singleton {
private Singleton() {
// 私有构造函数
}
private static class SingletonHolder {
private static final Singleton instance = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
}
```
以上是两种常见的单例模式实现方式,根据具体情况选择适合的方式。
阅读全文