Java對象池是一種緩存對象的機制,通過復用已經創建的對象來提高性能。以下是一種使用Java對象池的簡單實現方式:
public class ObjectPool<T> {
private List<T> availableObjects;
private List<T> usedObjects;
public ObjectPool() {
availableObjects = new ArrayList<>();
usedObjects = new ArrayList<>();
}
public synchronized T getObject() {
if (availableObjects.isEmpty()) {
// 如果對象池為空,創建新的對象并加入可用對象列表
T object = createObject();
availableObjects.add(object);
}
// 從可用對象列表中移除一個對象,并加入已使用對象列表
T object = availableObjects.remove(0);
usedObjects.add(object);
return object;
}
public synchronized void releaseObject(T object) {
// 釋放一個對象,將其從已使用對象列表移除,并加入可用對象列表
if (usedObjects.remove(object)) {
availableObjects.add(object);
}
}
private T createObject() {
// 創建新的對象
T object = ...
return object;
}
}
getObject()
方法獲取對象,使用完后通過releaseObject()
方法釋放對象。ObjectPool<Object> objectPool = new ObjectPool<>();
Object object = objectPool.getObject();
// 使用對象
...
objectPool.releaseObject(object);
值得注意的是,對象池需要處理并發訪問的情況,可以使用synchronized
關鍵字來保證線程安全,也可以使用并發集合類來代替List
,例如ConcurrentLinkedQueue
。另外,對象池還可以設置最大對象數量、對象超時時間等,根據實際需求進行調整。