如何停止与时间限制的方法

我觉得题目可能不够准确,但是我真的不知道该怎么形容它在一个非常简短的方式...

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

如果分析提供了10秒之内的结果,返回结果; 否则,时间最多达10秒时,停止进程并返回一个虚拟值

我在这个领域的新手,任何建议将受到欢迎。

--------------解决方案-------------

可以使用FutureTask提供创建一个作业和(以get()与超时)请求特定时间内的结果。 如果该时间窗被破坏,那么你会得到一个异常。

在这一点上,你就可以调用cancel()方法与设置为参数true to强制中断并取消基本的任务。

Object result = DUMMY;
try {
result = futureTask.get(5, TimeOut.SECONDS);
}
catch (TimeoutException e) {
futureTask.cancel(true);
}

你可以使用一个计时器(java.util.Timer中),其可以通知该线程的,然后当定时器期满它可以告诉线程停止。

一个更好的解决办法是产卵的过程中关闭到它自己的线程,然后告诉你的主线程等待处理线程和睡眠10秒。 当它完成,你可以发送线程停止信号。 注:我不会使用stop()方法,而不是通过在执行过程中被检查每隔一段时间一个synchronized方法无论是发送信号或设置一个值。

看看java.util.concurrent.Future尤其是get(long timeout, TimeUnit unit)的方法:

如有必要,等待至多给定的时间计算完成,然后获取其结果(如果可用)。

我写一个游戏AI所用极小的时候也有类似的问题,要求是在5秒内一招回。 我测试使用定时器设置一个布尔标志在我的代码这是定期检查,有超过通过调用System.currentTimeMillis的任何性能提升()。

所以,如果你想返回虚值实际上是一些局部的解决方案,我建议您将系统的时间很长,并定期检查,看看是否到十再秒钟启动并返回任何值,你已经离开。

否则,使用FutureTask提供并调用get方法就可以与你的超时。 有一件事布莱恩没有提及,虽然是你的代码做处理必须检查它是否定期,以实际月初停止执行被中断。

分类:java的 时间:2015-03-16 人气:180
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.150 (s). 9 q(s)