如何知道线程是否使用 JSch 被中断

How to know if a thread was interrupted using JSch

我正在使用 com.jcraft.jsch 库进行远程 SFTP 会话。这是一个方便的库,易于使用。

虽然我在单线程场景中使用该库,但没有出现任何问题,但现在我在我的应用程序的多个线程之一中使用它。

我发现的问题是 Jsch 似乎在我自己的代码之前捕获了 InterruptedException,只是为了将其作为不同的异常重新抛出,SftpExceptionJschException.

如果我假装任何 SftpExceptionJschException 来自 InterruptedException,那么我可以轻轻地停止线程,一切都会正常进行。但是,这很危险,因为我屏蔽了真正的 SftpException/JschException 由于 Internet 传输错误、错误凭据等引起的异常

如何确定 InterruptedException 发生在 Jsch 内部?

当引发 SftpExceptionJSchException 来包装另一个 throwable 时,它​​的 cause 将是一个 Throwable 描述被包装的异常。

因此,您可以检查 .getCause() 是否 returns 和 InterruptedException