java - GenericObjectPool 返回的对象当前不属于此池
问题描述
我创建了一个需要重用的对象池。每次我尝试返回对象时都会收到错误消息:“返回的对象当前不属于该池”
我已经覆盖了 equals 和 hashcode 方法,但这没有帮助。
我使用以下代码设置了池:
GenericObjectPoolConfig config = new GenericObjectPoolConfig();
config.setMaxIdle(10);
config.setMaxTotal(10);
config.setTestOnBorrow(true);
config.setTestOnReturn(true);
ImageDownloaderPool.POOL= new ImageDownloaderPool<String, String>(new ImageDownloaderFactory<String, String>(), config);
这是我如何覆盖equals和hashCode:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof ImageDownloader)) return false;
ImageDownloader<String, String> that = (ImageDownloader<String, String>) o;
if (id != null ? !id.equals(that.id) : that.id != null) return false;
return true;
}
@Override
public int hashCode() {
return id != null ? id.hashCode() : 0;
}
我像这样在 Pool 上调用 returnObject:
finally {
if (dl != null) {
try {
ImageDownloaderPool.getPOOL().returnObject(dl);
}
catch (Exception e2) {
e2.printStackTrace();
}
我收到此错误:
java.lang.IllegalStateException:返回的对象当前不属于此池 org.apache.commons.pool2.impl.GenericObjectPool.returnObject(GenericObjectPool.java:524) com.ifmrestoration.webscraper.CorrigoScraperPool.returnObject(CorrigoScraperPool.java:45) com.ifmrestoration.webscraper.ImageDownloader.saveImageFromAWSurl(ImageDownloader.java:164) com.ifmrestoration.webscraper.ImageDownloaderServlet.doPost(ImageDownloaderServlet.java:49) javax.servlet.http.HttpServlet.service(HttpServlet.java:707) javax. servlet.http.HttpServlet.service(HttpServlet.java:790) org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:848) org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:第1772章:60) org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1759) org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:582) org.eclipse.jetty.server.handler。 ScopedHandler.handle(ScopedHandler.java:143) org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:524) org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226) org. eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134) com.google.apphosting.runtime.jetty9.ParseBlobUploadHandler。句柄(ParseBlobUploadHandler.java:119) org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1182) com.google.apphosting.runtime.jetty9.AppEngineWebAppContext.doHandle(AppEngineWebAppContext.java:187) org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:512) org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) org.eclipse.jetty.server。 handler.ContextHandler.doScope(ContextHandler.java:1112) org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) com.google.apphosting.runtime.jetty9.AppVersionHandlerMap.handle(AppVersionHandlerMap.java: 293) org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134) org.eclipse.jetty.server.Server.handle(Server.java:539) org.eclipse.jetty.server.HttpChannel。处理(HttpChannel.java:333)com.google.apphosting.runtime.jetty9.RpcConnection.handle(RpcConnection.java:213)com.google.apphosting.runtime.jetty9.RpcConnector.serviceRequest(RpcConnector.java:81)com。 google.apphosting.runtime.jetty9。JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:134) com.google.apphosting.runtime.JavaRuntime$RequestRunnable.dispatchServletRequest(JavaRuntime.java:722) com.google.apphosting.runtime.JavaRuntime$RequestRunnable.dispatchRequest(JavaRuntime.java:685) com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:655) com.google.apphosting.runtime.JavaRuntime$NullSandboxRequestRunnable.run(JavaRuntime.java:847) com.google.apphosting.runtime.ThreadGroupPool$ PoolEntry.run(ThreadGroupPool.java:270) java.lang.Thread.run(Thread.java:748)第685章 com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:655) ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:270) java.lang.Thread.run(Thread.java:748)第685章 com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:655) ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:270) java.lang.Thread.run(Thread.java:748)
解决方案
由于您正在使用两个类实例化您的池,因此我假设您正在扩展
org.apache.commons.pool2.impl.GenericKeyedObjectPool在这种情况下,您应该使用:
pool.returnObject("yourkey", yourobject);
不需要 AFAIK 覆盖。
推荐阅读
- python - 如何在 matplotlib 中为 Pandas 的 DatetimeIndex 自定义 xaxis 刻度?
- javascript - 我应该如何编写一个测试来证明或反驳所做的陈述并将这些测试的结果存储在变量中?
- visual-c++ - 通过 _malloca 的堆栈分配是否会触发通过 _CrtSetAllocHook 设置的分配挂钩
- java - 如何在 Java Project 中使用稍作修改的 JMTP 库?
- javascript - 未捕获(承诺中)类型错误:无法读取 null 的属性“ownerDocument”
- dynamics-365 - 查找字段未显示所有列 Dynamics 365 business Central
- ffmpeg - FFMPEG 剪切视频并添加水印
- r - R Shiny - 使用 checkboxGroupInput 过滤 data.frame
- deep-learning - Pytorch:如何找到多标签分类的准确性?
- javascript - 如何仅在移动屏幕上加载图像并做出响应?