Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在给定时间内未提交任务时关闭ExecutorService_Java_Executorservice_Callable - Fatal编程技术网

Java 在给定时间内未提交任务时关闭ExecutorService

Java 在给定时间内未提交任务时关闭ExecutorService,java,executorservice,callable,Java,Executorservice,Callable,我使用一个ExecutorService调用一个服务,该服务基本上连接到一个应用程序(通过SSH本地或远程),并允许向它发送命令并获取其输出 因此,ExecutorService创建的线程正在等待用户输入,然后通过调用方法的实现将该输入作为任务处理,该方法返回输出,如下所示: @Override public String call() throws Exception { write(command); return readResult(); } 在给定时间内没有调用任何任

我使用一个
ExecutorService
调用一个服务,该服务基本上连接到一个应用程序(通过SSH本地或远程),并允许向它发送命令并获取其输出

因此,
ExecutorService
创建的
线程
正在等待用户输入,然后通过调用方法的实现将该输入作为任务处理,该方法返回输出,如下所示:

@Override
public String call() throws Exception {
    write(command);
    return readResult();
}
在给定时间内没有调用任何任务时,我想停止
线程
(关闭
执行器服务
),但我找不到如何执行
Future.get
ExecutorService.invoke[All | Any]
可以处理超时,但只处理它调用的任务

你知道我该怎么做吗

提前谢谢

问候,


Zim

您可以使用执行器。newCachedThreadPool(),它的文档上写着:

六十秒未使用的线程将被终止并从缓存中删除。因此,空闲时间足够长的池不会消耗任何资源。请注意,可以使用ThreadPoolExecutor构造函数创建具有类似属性但详细信息不同(例如超时参数)的池


这会关闭线程,而不是整个执行器,但如果执行器实际上没有占用任何资源,则应该可以关闭线程。

您可以使用
Executors.newCachedThreadPool()
,其文档中说:

六十秒未使用的线程将被终止并从缓存中删除。因此,空闲时间足够长的池不会消耗任何资源。请注意,可以使用ThreadPoolExecutor构造函数创建具有类似属性但详细信息不同(例如超时参数)的池


这会关闭线程,而不是整个执行器,但如果执行器没有实际占用任何资源,这应该可以。

您可能想看看
执行器类的实现:例如,使用
newCachedThreadPool()创建的执行器已经有一个超时:

return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
    60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>());

您可能希望查看
Executors
类的实现:例如,使用
newCachedThreadPool()
创建的执行器已经有一个超时:

return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
    60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>());

这似乎很管用!现在我必须在线程关闭时调用应用程序服务shutdown方法,我可能可以重写
ExecutorService.shutdown()
。谢谢你的快速回答:)这似乎很管用!现在我必须在线程关闭时调用应用程序服务shutdown方法,我可能可以重写
ExecutorService.shutdown()
。感谢您的快速回答:)查看
Executors
类的实现是我第一次阅读@Louis answer+对于详细的建议:)查看
Executors
类的实现是我第一次阅读@Louis answer+1详细建议:)