繁体   English   中英

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

[英]How to execute task for a specific period in Java.?

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

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

我怎样才能在Java中实现它。

你可以像下面这样:

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的 Javadocs就在这里

[编辑]

但我应该注意到,根据您长时间运行的任务的不同,可能无法强制它停止运行

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

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

java native进程超时

你可能想要使用Timer和TimerTask的组合。 创建一个新的Timer并调用schedule(TimerTask,long,long)方法来启动它。 您的TimerTask对象将是负责检查退出条件的项目。

从Java 1.5开始,有一个用于并发的高级API。 它包括一组名为Executors的接口。 他们可以帮助你。

在我看来,使用未来是一种非常简单的方式:

ExecutorService executorService = Executors.newSingleThreadExecutor();
Future<?> f = executorService.submit(myTask);
try {
    f.get(timeout, TimeUnit.MILLISECONDS);
} catch (TimeoutException e) {
    f.cancel(true);
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM