对象池模式
对象的示例化是最耗费性能的操作之一,这在过去是一个大问题,现在我们不用再过于关注它。当我们处理封装外部资源时,对象的创建操作则会耗费很多资源。
解决方案是重用和共享这些创建成本高昂的对象,这称为对象池模式
对象池模式的参与者:
- ResourcePool (资源池类): 用于封装逻辑的类,用来保存和管理资源列表
- Resource (资源类): 用于封装特定资源的类。资源类通常被池资源引用,因此只要资源池不重新分配,他们就永远不会回收。
- Client (客户端类):使用资源的类
对象池模式的简单示例
资源池
public class ResourcePool {
private List<Resource> resources = new ArrayList<>();
public ResourcePool() {
for(int i = 0; i < 10; i++) {
Resource resource = new Resource();
resources.add(resource);
}
}
public synchronized Resource getResource() throws Exception {
Resource res = null;
if(resources.size() <=0) {
throw new Exception("The Resources has exhausted");
}else {
res=resources.get(0);
}
return res;
}
public synchronized void releaseResource(Resource resource) {
resources.add(resource);
}
}
资源类
public class Resource {
public void doFunction() {
System.out.println("Function start");
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Function end");
}
}
Client
public class Client {
public static void main(String[] args) {
ResourcePool pool = new ResourcePool();
Resource res = null;
try {
res = pool.getResource();
res.doFunction();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
pool.releaseResource(res);
}
}
}