明显地
HttpClient
旨在自我管理。所以它负责维护连接池,自己缓存TTL。
在
HttpClientCode
我们可以找到以下代码:
if (!owner.isReferenced()) {
Log.logTrace("{0}: {1}",
getName(),
"HttpClient no longer referenced. Exiting...");
return;
}
这是一个优雅的退出方式
SelectorManager
循环并清理所有资源。
@Override
public void run() {
...
try {
while (!Thread.currentThread().isInterrupted()) {
...
if (!owner.isReferenced()) {
Log.logTrace("{0}: {1}",
getName(),
"HttpClient no longer referenced. Exiting...");
return;
}
...
}
} catch (Throwable e) {
...
} finally {
...
shutdown();
}
}
final boolean isReferenced() {
HttpClient facade = facade();
return facade != null || referenceCount() > 0;
}
所以当你
HTTP客户端
对象将不被引用,然后它将清除所有资源。
upd:你也应该通过传递超时来调整你的请求。