我写了一段代码。如何让代码重复运行一段时间,比如10秒?
答案 0 :(得分:0)
ExecutorService
似乎提供了执行任务的方法,直到它们完成或发生超时(例如invokeAll
)。
答案 1 :(得分:0)
您可以尝试Quartz Job Scheduler
Quartz是一个功能丰富的开源作业调度库 可以集成在几乎任何Java应用程序中 - 来自 最大的独立应用程序,以最大的电子商务系统。 Quartz可用于创建简单或复杂的执行计划 数十,数百甚至数万个工作岗位;工作的任务 被定义为可以虚拟执行的标准Java组件 你可以编程要做的任何事情。 Quartz Scheduler包括 许多企业级功能,例如支持JTA事务 和聚类。
如果您熟悉Linux中的Cron,那么这对您来说就是一件轻松的事。
答案 2 :(得分:0)
使用worker并在一个线程中启动它,在主线程中等待特定时间并在此之后停止该worker。
MyRunnable task = new MyRunnable();
Thread worker = new Thread(task);
// Start the thread, never call method run() direct
worker.start();
Thread.sleep(10*1000); //sleep 10s
if (worker.isAlive()) {
task.stopPlease(); //this method you have to implement
}
答案 3 :(得分:0)
不太清楚为什么人们会对这个问题进行投票。请务必在将来提供一些示例代码。但是你的答案很简单。创建一个新线程来观察等待。用简单的代码:
public class RunningClass {
public static void runThis(){
TimerThread tt = new TimerThread();
tt.timeToWait = 10000;
new Thread(tt).start();
while (!TimerThread.isTimeOver){
\\Code to execute for time period
}
}
class TimerThread implements Runnable {
int timeToWait = 0;
boolean isTimeOver = false;
@override
public void run(){
Thread.sleep(timeToWait);
}
}
上面的代码可以放在同一个类文件中。将10000更改为您需要运行的任何时间。
您可以使用其他选项,但这需要您了解工作人员和任务。
答案 4 :(得分:0)
不确定具体要求是什么,但是 如果你的req只取消长期运行的任务
你可以使用ExecutorService&未来(在jdk 5中)如下。
ExecutorService fxdThrdPl = Executors.newFixedThreadPool(2);
// actual task .. which just prints hi but after 100 mins
Callable<String> longRunningTask = new Callable<String>() {
@Override
public String call() throws Exception {
try{
TimeUnit.MINUTES.sleep(100); // long running task .......
}catch(InterruptedException ie){
System.out.println("Thread interrupted");
return "";
}
return "hii"; // result after the long running task
}
};
Future<String> taskResult = fxdThrdPl.submit(longRunningTask); // submitting the task
try {
String output = taskResult.get(***10**strong text**, TimeUnit.SECONDS***);
System.out.println(output);
} catch (InterruptedException e) {
} catch (ExecutionException e) {
} catch (TimeoutException e) {
***taskResult.cancel(true);***
}