1

我只需要运行以下代码 60 秒

该代码延迟 2 秒,每 5 秒重复一次。

但在这里我只需要这样做 60 秒

        int delay = 3000; // delay for 3 sec. 
        int period = 5000; // repeat every 5 sec. 
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {

            public void run() {
                System.out.println("Would it run?"+System.currentTimeMillis());
            }
        }, delay, period);

请让我知道该怎么做?

4

6 回答 6

7

您可以简单地使用ScheduledExecutorService

  • 安排任务
  • 检索ScheduledFuture
  • 60 秒后取消该未来:
final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

final Runnable task = new Runnable() {
    public void run() {
        System.out.println("Would it run?"+System.currentTimeMillis());
    }
};
final ScheduledFuture<?> handle =
        scheduler.scheduleAtFixedRate(task, 2, 5, TimeUnit.SECONDS);
scheduler.schedule(new Runnable() {
    public void run() { handle.cancel(true); }
}, 60, SECONDS);
于 2013-02-07T09:17:45.580 回答
1

你需要计算你这样做了多少次,然后取消:

import java.util.Timer;
import java.util.TimerTask;


public class Waiting {
    public static int times;

    public static void main(String[] args)
    {
        int delay = 3000;  // delay for 3 sec. 
        int period = 5000; // repeat every 5 sec. 
        times = 60000 / ( delay + period );


        Timer timer = new Timer();
        timer.scheduleAtFixedRate( new TimerTask() {

            public void run() {
                System.out.println( "Times remaining: " + Waiting.times );

                --Waiting.times;
                if ( Waiting.times == 0 ) {
                    this.cancel();
                    System.exit( 0 );
                }
            }
        }, delay, period); 
    }
}

希望这可以帮助。

于 2013-02-07T09:16:17.347 回答
1
public class test{
static int delay = 3000; // delay for 3 sec. 
       static int period = 5000; // repeat every 5 sec. 
        static int totaltime = 0;   
public static void main(String ar[]){


        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {

            public void run() {
                test.totaltime+= ((test.delay+test.period)/1000);

                if(test.totaltime > 60)System.exit(0);
                System.out.println("Would it run?"+System.currentTimeMillis());

            }
        }, test.delay, test.period);
}
    }
于 2013-02-07T09:11:06.463 回答
0

老实说,我从未使用过计时器,但如果您想在一段时间内运行您的任务,为什么不使用public void schedule(TimerTask task,long delay, long period)

如果我理解正确,你想现在运行你的任务,持续 60 秒,所以:

timer.schedule(myTask,0,60000);

应该为你做,但正如我所说,我从不使用计时器,所以我不是 100% 肯定它会工作

于 2013-02-07T10:02:25.867 回答
0

您可以设置一个计时器,该计时器将达到 60 并设置一个 if 是这样的:

int time = 3;

 timer.scheduleAtFixedRate(new TimerTask() {

            public void run() {
     if(time<60){
                System.out.println("Would it run?"+System.currentTimeMillis());
                time = time + 5;
     }
     else{ timer.stop(); }
            }
        }, delay, period);
于 2013-02-07T09:12:26.540 回答
0

只需在所需的重复次数后cancel从该方法调用。run

于 2013-02-07T09:12:29.130 回答