我使用的是ExecutorService
调用基本上连接到一个应用程序(本地或远程通过SSH)服务,并允许将命令发送到它,得到它的输出。
因此,该Thread
由创建ExecutorService
正在等待用户输入,然后该输入被处理为通过呼叫方法,它返回的输出,看起来像这样的一种方式的任务:
@Override
public String call() throws Exception {
write(command);
return readResult();
}
我想停止Thread
(关闭ExecutorService
)时,没有任务被称为给定的时间,但我找不到怎么办呢...... Future.get
或ExecutorService.invoke[All|Any]
可以处理超时,但只是把它称之为任务。
我如何能设法做到这一点任何想法?
提前致谢!
问候,
以星
你可以只使用Executors.newCachedThreadPool()
他的医生说:
尚未使用的60秒的线程将终止并从缓存中删除。 因此,对于长期保持足够的空闲池不会消耗任何资源。 需要注意的是具有类似性质的,但不同的细节(例如,超时参数)池可以使用的ThreadPoolExecutor构造来创建。
这将关闭线程,而不是整个执行,但应该是罚款,如果执行者实际上并没有采取任何资源。
你可能想看看在执行Executors
类:创建的执行者,例如,与newCachedThreadPool()
已经超时:
return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>());
这里的超时时间为60秒。 如果你想建立一个固定的池大小超时执行人,你还必须设置allowCoreThreadTimeOut(true)
:
ThreadPoolExecutor e =
new ThreadPoolExecutor(poolSize, poolSize,
keepAliveTime, timeUnit, new LinkedBlockingQueue<Runnable>());
e.allowCoreThreadTimeOut(true);