ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

【安卓】

2026/8/4 8:13:42 拓冰建站 浏览量
【安卓】

解决办法:
1、创建完客户端client之后,设置一下setIoServiceFactoryFactory,
设置时,填入自定义的setExecutorServiceFactory,代码如下。
2、自定义线程工厂,继承SshdThreadFactory,拿到线程对象后,设置一下setUncaughtExceptionHandler

1、
SshClient sshClient = SshClient.setUpDefaultClient();
DefaultIoServiceFactoryFactory defaultIoServiceFactoryFactoryInstance = DefaultIoServiceFactoryFactory.getDefaultIoServiceFactoryFactoryInstance();
defaultIoServiceFactoryFactoryInstance.setExecutorServiceFactory(new Factory() {
@Override
public CloseableExecutorService create() {
return new SshThreadPoolExecutor(
10, 10,// nThreads, nThreads, // 10, 10
0L, TimeUnit.MILLISECONDS, // TODO make this configurable
new LinkedBlockingQueue<>(),
new SshdThreadFactory("poolName"),
new ThreadPoolExecutor.CallerRunsPolicy());
}
});
sshClient.setIoServiceFactoryFactory(defaultIoServiceFactoryFactoryInstance);

2、
org.apache.sshd.common.util.threads.SshdThreadFactory#newThread中加入catch

    t.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {@Overridepublic void uncaughtException(Thread t, Throwable e) {// todo log error}});