用java编写一个单列模式的程序
时间: 2024-09-14 12:10:45 浏览: 37
JAVA程序设计技巧1001例
单例模式是一种常用的软件设计模式,用于确保一个类只有一个实例,并提供一个全局访问点。在Java中实现单例模式有很多种方式,下面是一个最简单的懒汉式单例实现,它在第一次被引用时才初始化对象:
```java
public class Singleton {
// 1. 创建一个私有静态实例变量
private static Singleton instance;
// 2. 私有构造函数防止外部创建实例
private Singleton() {
}
// 3. 提供一个公共静态方法返回单例实例
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
// 使用时只需调用Singleton.getInstance()即可获取Singleton类的唯一实例。
```
然而,上述懒汉式单例不是线程安全的。在多线程环境下可能会创建多个实例。为了保证线程安全,可以采取以下几种方式之一:
1. 在getInstance方法上使用`synchronized`关键字进行同步。
2. 使用双重检查锁定模式,即double-checked locking pattern,以减少不必要的同步开销。
3. 使用静态内部类的方式,确保在第一次加载类时初始化实例。
以下是使用双重检查锁定模式的线程安全单例实现示例:
```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;
}
}
```
以上代码使用了volatile关键字保证了`instance`变量的可见性,确保多线程环境下能够正确地创建单例。
阅读全文