pihentagy pihentagy - 1 year ago 182
Java Question

If I use JSch from more than one thread, how should I use it

Since connection creation takes up quite a few times, and I'd like to connect to multiple hosts, I started to use JSch from multiple threads.

However I get some nasty exceptions, which I think is because of JSch being not thread-safe. How should I use it, that it not throws any exception, which is due to the not-thread-safety of 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)


In my test I connected to the same host multiple times. That's why I got the exception.

Answer Source

As any other non-thread safe class.

Access it from a single thread at a time only.

Use synchronized statement:

If this downgrades performance, you can create a connection pool.

Though I do not think this exception is caused by concurrent access.

It's rather that the server rejects too frequent connection attempts from the same host (what is quite common).

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download