1

如果关闭启动 urlconnection 或 bufferedreader 的 executor 服务,而没有断开 urlconnection 或关闭 bufferedreader,会发生什么情况,是否存在内存丢失,是否会减慢 CPU 速度?

4

2 回答 2

3

关闭 Executor 不会终止已经很忙的线程。这些将运行完成(或使用中断有序关闭)。所以所有资源都会被正确清理(除非你在某处错过了 finally 块)。您有责任让您的可运行对象正确处理 InterruptedException(和其他异常)。

于 2012-09-27T03:13:41.390 回答
1

每个URLConnection类都带有预定义的超时。您可以使用指定超时

    connection.setReadTimeout(2000);
    connection.setConnectTimeout(2000);

无法保证这将起作用,因为 Java 文档本身不提供保证。

URLConnection#setConnectTimeout

URLConnection#setReadTimeout

此方法的一些非标准实现会忽略指定的超时。要查看读取超时设置,请调用 getReadTimeout()。

因此,除非您指定适当的超时,否则在这种情况下中断将不起作用。

ExecutorService#shutdownNow()提供了一种通过中断线程立即关闭的方法,但由于这些线程不能被中断,它没有提供额外的好处。

它仅在线程定义了其中断策略并执行可中断操作时才提供好处。

于 2012-09-27T04:40:12.597 回答