【问题标题】:Is it necessary to close a resource if it is used until the end of the process? [duplicate]如果使用到进程结束,是否需要关闭资源? [复制]
【发布时间】:2021-04-04 09:17:19
【问题描述】:

程序的终止是否有效地清理了资源,或者仍然需要明确地完成?如果没有任何好处,我会删除样板。

我理解在资源使用短于程序生命周期的长期程序的情况下的需求。但是当资源(如单例 HTTP 客户端)一直使用到最后时又会怎样呢?

1。没有明确的清理

这个版本会在程序退出时清理东西吗?

public static void main(String[] args) {
    CloseableHttpClient client = HttpClients.createDefault();

    // execute requests
}

2。使用资源尝试清理

这个版本显然可以清理,但需要额外的代码。

public static void main(String[] args) {
    try (CloseableHttpClient client = HttpClients.createDefault()) {
        // execute requests
    } catch (IOException e) {
        // exception handling
    }
}

【问题讨论】:

    标签: java resources resource-cleanup


    【解决方案1】:

    apachec doc 的最新更新是在 try 中创建:

    try (CloseableHttpClient httpclient = HttpClients.createDefault()) {
    

    更多full answer解释更详细

    答案是close方法用于关闭内部状态。 HTTPClient 的一些实现(在 httpclient 库中)可以配置为使用持久性资源,例如 PooledHttpClientConnectionManager 用于池连接,如果没有这种方法,您将无法在需要时清理这些资源

    【讨论】:

    • 谢谢,但我的问题并非特定于 apache。这应该是关于资源清理的一般问题。进程终止会清理资源吗?
    • @MartinTarjányi 尝试使用 resourcew 块清理资源
    • 我的问题是关于没有 try 块的版本
    • 谢谢,这正是我想要的。
    猜你喜欢
    • 1970-01-01
    • 2012-08-15
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多