Поскольку создание соединения занимает довольно много раз, и я хотел бы подключиться к нескольким хостам, я начал использовать JSch из нескольких потоков.Если я использую JSch из более чем одного потока, как его использовать
Тем не менее, я получаю некоторые неприятные исключения, которые, я думаю, из-за того, что JSch не является потокобезопасным. Как следует использовать его, чтобы он не вызывал каких-либо исключений, что связано с не-потоковой безопасностью JSch?
StackTrace:
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)
обновление
В моем тесте я подключен к же хозяевах несколько раз. Вот почему я получил исключение.
Я не думаю, что это исключение вызвано одновременным доступом. Скорее, сервер отклоняет слишком частые попытки подключения с одного и того же хоста (что довольно часто). Вы пытались подключиться с помощью нескольких параллельных экземпляров некоторых SSH/SFTP-клиентов, запущенных в тот же момент? –
, если он не является потокобезопасным, вы можете использовать его только из одного потока, и большинство сокетов-клиентов * логически * представляют собой однопоточную операцию в любом случае. Один экземпляр Jsh представляет собой одно соединение, вы не можете обойти это. 10 соединений - 10 экземпляров. –
Argh, извините за шум. Я сам выяснил, что @ martyn-prikryl написал в предыдущем комментарии: у меня есть дешевый тест, и действительно подключен к одному и тому же хозяину несколько раз. Теперь я переключился на подключение к нескольким хостам, и я проверил подключение к 20 хостам, и он работает без каких-либо исключений. Спасибо за ваш намек. – pihentagy