面试题答案
一键面试Java对象池基本原理
对象池是一种设计模式,其核心原理是在系统初始化时创建并缓存一定数量的对象。当需要使用对象时,优先从对象池中获取已创建的对象,而不是每次都创建新对象。使用完毕后,将对象归还到对象池中,以便后续再次使用。这样可以减少对象创建和销毁带来的开销,提高系统性能和资源利用率,尤其适用于创建成本较高的对象。
简单对象池实现代码示例
import java.util.ArrayList;
import java.util.List;
// 自定义对象
class CustomObject {
// 自定义对象的属性和方法
private int id;
public CustomObject(int id) {
this.id = id;
}
public int getId() {
return id;
}
@Override
public String toString() {
return "CustomObject{" +
"id=" + id +
'}';
}
}
// 对象池类
class ObjectPool {
private List<CustomObject> pool;
private int initialSize;
public ObjectPool(int initialSize) {
this.initialSize = initialSize;
pool = new ArrayList<>(initialSize);
initializePool();
}
private void initializePool() {
for (int i = 0; i < initialSize; i++) {
pool.add(new CustomObject(i));
}
}
public synchronized CustomObject getObject() {
if (pool.isEmpty()) {
// 如果对象池为空,可以选择创建新对象或者等待
CustomObject newObject = new CustomObject(-1);
System.out.println("创建新对象: " + newObject);
return newObject;
}
return pool.remove(pool.size() - 1);
}
public synchronized void returnObject(CustomObject object) {
pool.add(object);
System.out.println("归还对象: " + object);
}
}
public class ObjectPoolExample {
public static void main(String[] args) {
ObjectPool objectPool = new ObjectPool(5);
CustomObject obj1 = objectPool.getObject();
CustomObject obj2 = objectPool.getObject();
objectPool.returnObject(obj1);
objectPool.returnObject(obj2);
}
}
在上述代码中:
CustomObject
是自定义的需要复用的对象。ObjectPool
类实现了对象池的功能。构造函数初始化对象池的大小并创建初始数量的对象。getObject
方法从对象池中获取对象,如果对象池为空可以选择创建新对象。returnObject
方法将使用后的对象归还到对象池中。ObjectPoolExample
类展示了对象池的使用,获取对象并归还对象。