[英]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与线程池一起使用。 看看我对这个问题的回答,
你可能想要使用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.