事实上,我会在一段确定的时间内执行特定任务(一组指令)。
例如:我希望我的程序执行任务5分钟,如果它得到正确的结果它会停止,否则它将继续执行5分钟的正常任务,最后它会告诉我。
我如何在Java中实现它。
答案 0 :(得分:4)
您可能会遇到以下情况:
import java.util.concurrent.* ;
ExecutorService svc = Executors.newFixedThreadPool( 1 ) ;
svc.submit( new Runnable() {
public void run() {
// Do long running task
}
} ) ;
svc.shutdown() ;
svc.awaitTermination( 300, TimeUnit.SECONDS ) ;
的Javadocs
[编辑]
我应该注意到,根据你的长期任务正在做什么,可能无法强迫它停止运行
[edit2] submit方法返回一个Future
对象,然后您可以调用get
on with a timeout。此get
调用将阻塞,直到结果准备就绪,或者如果达到超时,则抛出TimeoutException。通过这种方式,您可以从长时间运行的任务中获得结果(如果这是您想要的)
答案 1 :(得分:2)
最强大的方法是将FutureTask与线程池一起使用。看看我对这个问题的回答,
答案 2 :(得分:0)
您可能想要使用Timer和TimerTask的组合。创建一个新的Timer并调用schedule(TimerTask,long,long)方法来启动它。您的TimerTask对象将是负责检查退出条件的项目。
答案 3 :(得分:0)
从Java 1.5开始,存在用于并发的高级API。它包含一组名为Executors的接口。他们可以帮助你。
答案 4 :(得分:0)
在我看来,使用未来是一种非常简单的方式:
ExecutorService executorService = Executors.newSingleThreadExecutor();
Future<?> f = executorService.submit(myTask);
try {
f.get(timeout, TimeUnit.MILLISECONDS);
} catch (TimeoutException e) {
f.cancel(true);
}
但是,当然,创建的线程需要能够处理中断。