我认为这个主题可能不够准确,但我真的不知道如何用非常简短的方式来描述它……
我想做的事情如下:我让一个进程运行一些分析(在Java中),并试图给出一个返回值,但是整个分析有时间限制,比如10秒
如果分析在10s内得到结果,则返回结果;否则,在达到10s时超时,则停止该过程并返回一个虚拟值
我是这个领域的新手,欢迎任何建议。
发布于 2009-07-23 21:38:17
您可以使用FutureTask创建作业并在特定时间内请求结果(使用带超时的get() )。如果时间窗口被破坏,那么您将得到一个异常。
此时,您可以在参数设置为true to的情况下调用cancel()方法,强制中断并取消底层任务。
Object result = DUMMY;
try {
result = futureTask.get(5, TimeOut.SECONDS);
}
catch (TimeoutException e) {
futureTask.cancel(true);
}发布于 2009-07-23 21:36:52
您可以使用计时器(java.util.Timer),它可以通知线程,然后当计时器超时时,它可以通知线程停止。
更好的解决方案是将进程派生到它自己的线程中,然后告诉主线程等待处理线程并休眠10秒。当它结束时,您可以向线程发送一个停止信号。注意:我不会使用stop()方法,而是通过同步方法发送信号或设置值,在执行过程中会经常检查该方法。
发布于 2009-07-23 21:36:51
看看java.util.concurrent.Future,特别是get(long timeout, TimeUnit unit)方法:
如果需要,
会等待至多给定的时间才能完成计算,然后检索其结果。
https://stackoverflow.com/questions/1174620
复制相似问题