如何在线程中断Java时停止URL连接

b_p*_*kes 9 java url multithreading

我有一个访问URL的多线程程序.线程通过执行程序服务运行,当用户选择退出GUI时,程序会尝试通过调用来中断线程executor.shutdownNow().然而,程序关闭需要很长时间,因为许多线程在一个url.openStream()调用中被阻塞,并且由于这不会抛出InterruptedException,所以到目前为止我被迫只是在调用之前和之后检查Thread.currentThread().isInterrupted().

我想知道在线程中断时是否有更好的方法来中断URL连接?否则,让程序尽快关闭的最佳方法是什么?

请注意,我不希望在连接上设置超时,因为我希望在程序运行时访问所有URL.

Con*_*Del 1

如果您查看URLConnection的 Javadocs ,它会给您一个提示:如果您在 URLConnection 上调用 getInputStream 或 getOutputStream,然后关闭这些流中的任何一个,它将关闭连接。如果您在等待 getInput/OutputStream 调用时陷入困境,那么我认为无能为力。但是,如果您有流,请关闭它(它将抛出 IOException 并释放在流上等待的所有线程)并且连接完成

仅供参考:我发现这种关闭 InputStream 的方法无论是当您希望它超时还是当您只是想停止处理时都非常有效,比使用 Interrupt() 更有效