HttpClient 4.0.3版本如何关闭?商业应用扩展适配问题
在HttpClient 4.0.3中关闭客户端的正确方式
我明白你的困扰——HttpClient 4.0.3确实没有后续版本里的close()方法,但它提供了对应的资源清理方式,你只需要调用shutdown()方法就能完成客户端的关闭。下面是具体的实现步骤:
核心思路
你的HttpClient实例是GetPrices类的私有成员,而done()方法是SwingWorker在后台任务全部完成后执行的回调,正好适合在这里做资源清理。我们只需要在done()方法的finally块中调用shutdown(),确保无论任务成功还是失败,资源都会被释放。
修改后的代码
更新GetPrices类的done()方法,加入关闭逻辑:
@Override protected void done() { List<StockPrice> spListp; try { // Retrieve the return value of doInBackground. lstStock = get(); setProgress(100); } catch (InterruptedException e) { // Handle thread interruption } catch (ExecutionException e) { // Handle exceptions thrown from doInBackground } finally { // 关闭HttpClient 4.0.3实例 if (client != null) { // 因为HttpClient接口没有shutdown(),需要强转为具体实现类 ((DefaultHttpClient) client).shutdown(); } } }
关键说明
- 在HttpClient 4.0.x版本中,
DefaultHttpClient的shutdown()方法会关闭内部的连接管理器,释放所有持有的连接(包括活跃和空闲状态的),完全等价于高版本中的close()功能。 - 把关闭逻辑放在
finally块里是最佳实践,这样即使任务过程中抛出异常,客户端也能被正确关闭,避免资源泄漏。 - 由于你声明的
client是HttpClient接口类型,需要强制转换为DefaultHttpClient才能调用shutdown()——这是安全的,因为你实际实例化的就是DefaultHttpClient。
这样修改后,所有URL调用完成后,HttpClient就会被正确关闭,释放相关资源了。
内容的提问来源于stack exchange,提问作者user4031188
相关产品推荐
相关产品推荐

