如果关闭启动urlconnection或bufferedreader的执行程序服务,而不断开urlconnection或关闭bufferedreader,会发生什么情况,是否存在内存丢失,是否会降低cpu的速度?
答案 0 :(得分:3)
关闭Executor不会终止已经忙碌的线程。这些将运行完成(或使用中断有序关闭)。所以所有资源都将被正确清理(除非你错过了某个地方的finally块)。您的责任是让您的runnables正确处理InterruptedException(和其他异常)。
答案 1 :(得分:1)
每个URLConnection
类都带有预定义的超时。您可以使用
connection.setReadTimeout(2000);
connection.setConnectTimeout(2000);
无法保证这将起作用,因为Java doc本身不提供保证。
URLConnection#setConnectTimeout
此方法的某些非标准实现会忽略指定的超时。要查看读取超时设置,请调用getReadTimeout()。
除非您指定适当的超时时间,否则中断将无效。
ExecutorService#shutdownNow()提供了一种通过中断线程立即关闭的方法,但由于这些线程无法中断,因此不会带来额外的好处。
只有当线程定义了中断策略并执行可中断操作时,它才会提供好处。