如何在Java中执行特定时期的任务。

时间:2010-06-16 14:02:17

标签: java multithreading task

事实上,我会在一段确定的时间内执行特定任务(一组指令)。

例如:我希望我的程序执行任务5分钟,如果它得到正确的结果它会停止,否则它将继续执行5分钟的正常任务,最后它会告诉我。

我如何在Java中实现它。

5 个答案:

答案 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 ) ;

ExecutorService are here

的Javadocs

[编辑]

我应该注意到,根据你的长期任务正在做什么,可能无法强迫它停止运行

[edit2] submit方法返回一个Future对象,然后您可以调用get on with a timeout。此get调用将阻塞,直到结果准备就绪,或者如果达到超时,则抛出TimeoutException。通过这种方式,您可以从长时间运行的任务中获得结果(如果这是您想要的)

答案 1 :(得分:2)

最强大的方法是将FutureTask与线程池一起使用。看看我对这个问题的回答,

java native Process timeout

答案 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);
}

但是,当然,创建的线程需要能够处理中断。