首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何停止有时间限制的进程

如何停止有时间限制的进程
EN

Stack Overflow用户
提问于 2009-07-23 21:32:27
回答 4查看 1.3K关注 0票数 3

我认为这个主题可能不够准确,但我真的不知道如何用非常简短的方式来描述它……

我想做的事情如下:我让一个进程运行一些分析(在Java中),并试图给出一个返回值,但是整个分析有时间限制,比如10秒

如果分析在10s内得到结果,则返回结果;否则,在达到10s时超时,则停止该过程并返回一个虚拟值

我是这个领域的新手,欢迎任何建议。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-07-23 21:38:17

您可以使用FutureTask创建作业并在特定时间内请求结果(使用带超时的get() )。如果时间窗口被破坏,那么您将得到一个异常。

此时,您可以在参数设置为true to的情况下调用cancel()方法,强制中断并取消底层任务。

代码语言:javascript
复制
Object result = DUMMY;
try {
   result = futureTask.get(5, TimeOut.SECONDS);
}
catch (TimeoutException e) {
   futureTask.cancel(true);
}
票数 3
EN

Stack Overflow用户

发布于 2009-07-23 21:36:52

您可以使用计时器(java.util.Timer),它可以通知线程,然后当计时器超时时,它可以通知线程停止。

更好的解决方案是将进程派生到它自己的线程中,然后告诉主线程等待处理线程并休眠10秒。当它结束时,您可以向线程发送一个停止信号。注意:我不会使用stop()方法,而是通过同步方法发送信号或设置值,在执行过程中会经常检查该方法。

票数 1
EN

Stack Overflow用户

发布于 2009-07-23 21:36:51

看看java.util.concurrent.Future,特别是get(long timeout, TimeUnit unit)方法:

如果需要,

会等待至多给定的时间才能完成计算,然后检索其结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1174620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档