需要在java中重复执行一段固定的持续时间

时间:2015-03-10 07:50:49

标签: java multithreading java.util.concurrent

我写了一段代码。如何让代码重复运行一段时间,比如10秒?

5 个答案:

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