如何知道线程是否使用 JSch 被中断
How to know if a thread was interrupted using JSch
我正在使用 com.jcraft.jsch
库进行远程 SFTP 会话。这是一个方便的库,易于使用。
虽然我在单线程场景中使用该库,但没有出现任何问题,但现在我在我的应用程序的多个线程之一中使用它。
我发现的问题是 Jsch 似乎在我自己的代码之前捕获了 InterruptedException
,只是为了将其作为不同的异常重新抛出,SftpException
或 JschException
.
如果我假装任何 SftpException
和 JschException
来自 InterruptedException
,那么我可以轻轻地停止线程,一切都会正常进行。但是,这很危险,因为我屏蔽了真正的 SftpException
/JschException
由于 Internet 传输错误、错误凭据等引起的异常
如何确定 InterruptedException
发生在 Jsch 内部?
当引发 SftpException
或 JSchException
来包装另一个 throwable 时,它的 cause
将是一个 Throwable
描述被包装的异常。
因此,您可以检查 .getCause()
是否 returns 和 InterruptedException
。
我正在使用 com.jcraft.jsch
库进行远程 SFTP 会话。这是一个方便的库,易于使用。
虽然我在单线程场景中使用该库,但没有出现任何问题,但现在我在我的应用程序的多个线程之一中使用它。
我发现的问题是 Jsch 似乎在我自己的代码之前捕获了 InterruptedException
,只是为了将其作为不同的异常重新抛出,SftpException
或 JschException
.
如果我假装任何 SftpException
和 JschException
来自 InterruptedException
,那么我可以轻轻地停止线程,一切都会正常进行。但是,这很危险,因为我屏蔽了真正的 SftpException
/JschException
由于 Internet 传输错误、错误凭据等引起的异常
如何确定 InterruptedException
发生在 Jsch 内部?
当引发 SftpException
或 JSchException
来包装另一个 throwable 时,它的 cause
将是一个 Throwable
描述被包装的异常。
因此,您可以检查 .getCause()
是否 returns 和 InterruptedException
。