MST
星途 面试题库

面试题:Java中对象池的基本原理与简单实现

请简要阐述Java对象池的基本原理,并使用代码示例展示如何实现一个简单的对象池,用于复用某种自定义对象。
32.1万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

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);
    }
}

在上述代码中:

  1. CustomObject 是自定义的需要复用的对象。
  2. ObjectPool 类实现了对象池的功能。构造函数初始化对象池的大小并创建初始数量的对象。getObject 方法从对象池中获取对象,如果对象池为空可以选择创建新对象。returnObject 方法将使用后的对象归还到对象池中。
  3. ObjectPoolExample 类展示了对象池的使用,获取对象并归还对象。