使用单例模式在系统中创建对象, 1、创建的对象个数在配置文件中指定,创建的对象个数最多不超过指定的个数。 2、使用懒汉模式创建对象,注题线程安全。 3、在客户端中测试创建的对象是不是一样的
时间: 2024-11-03 07:21:29 浏览: 25
在系统中使用单例模式是为了确保在整个应用生命周期内只有一个实例存在,满足了你在描述中提到的需求:
1. **配置文件控制实例数**:通过读取配置文件,设置允许创建的最大单例对象数量。在初始化时,检查是否达到最大值,如果没有,则创建新的实例;如果已满,则不再创建新实例。
```java
private static int maxSingletons = ...; //从配置文件获取
private static List<YourSingleton> instances = new ArrayList<>();
public static YourSingleton getInstance() {
synchronized (YourSingleton.class) {
if (instances.size() < maxSingletons) {
instances.add(new YourSingleton());
}
return instances.get(0); //返回第一个对象,因为列表是有序的
}
}
```
2. **懒汉模式 + 线程安全**:利用双重检查锁定(Double-Checked Locking)保证在多线程环境下只初始化一次。首先判断实例是否存在,不存在再加锁创建。
```java
private volatile static YourSingleton instance;
public static YourSingleton getInstance() {
if (instance == null) {
synchronized (YourSingleton.class) {
if (instance == null) {
instance = new YourSingleton();
}
}
}
return instance;
}
```
这里使用`volatile`关键字防止指令重排序导致的问题。
3. **验证客户端中创建的对象一致性**:在客户端,每次通过`getInstance()`获取到的都是相同的对象,因为它们指向的是全局唯一的实例。
```java
YourSingleton obj1 = YourSingleton.getInstance();
YourSingleton obj2 = YourSingleton.getInstance();
System.out.println(obj1 == obj2); // 如果是单例模式,这将打印true
```
阅读全文