如果我从多个线程中使用JSch,应该如何使用它

pih*_*agy 5 java concurrency jsch

由于连接创建需要花费很多时间,并且我想连接到多个主机,因此我开始从多个线程使用JSch。

但是我遇到了一些讨厌的异常,我认为这是因为JSch不是线程安全的。我应该如何使用它,使其不会引发任何异常(由于JSch的非线程安全性)?

堆栈跟踪:

com.jcraft.jsch.JSchException: connection is closed by foreign host
    at com.jcraft.jsch.Session.connect(Session.java:269)
    at com.jcraft.jsch.Session.connect(Session.java:183)
    at com.ericsson.eea.ark.test.common.ssh.JschSshContext.session$lzycompute(JschSshContext.scala:64)
Run Code Online (Sandbox Code Playgroud)

更新

在测试中,我多次连接到同一主机。这就是为什么我得到了例外。

Mar*_*ryl 5

与任何其他非线程安全类一样。

一次只能从一个线程访问它。

使用synchronized语句:
https ://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html

如果这会降低性能,您可以创建连接池。


虽然我不认为这个异常是由并发访问引起的。

相反,服务器拒绝来自同一主机的过于频繁的连接尝试(这很常见)。