我怎样才能在Java中每隔x秒y时间执行一次方法

时间:2019-01-08 08:52:45

标签: java timer

我想每秒执行一次方法20次。

实际上我有计时器

Timer timer = new Timer();
int begin = 0;
int timeInterval = 1000;

timer.scheduleAtFixedRate(new TimerTask() {
    @Override
    public void run() {
        //call the method
    }
}, begin, timeInterval);

如何在此间隔内调用方法20次?

2 个答案:

答案 0 :(得分:7)

使用timer.schedule(),并使用timer.cancel()跟踪计时器执行了多少次,并在20次后停止计时器。

java doc - time schedule

  

计划指定的任务以重复执行固定延迟,   在指定的延迟后开始。随后执行死刑   以大约固定的时间间隔,以指定的时间间隔分隔。

     

在固定延迟执行中,相对于   上一次执行的实际执行时间。如果执行是   由于任何原因(例如垃圾收集或其他背景)而延迟   活动),后续执行也会被延迟。在长   运行时,执行频率通常会略低于   指定周期的倒数(假设系统时钟为   底层的Object.wait(long)是正确的)。

     

固定延迟执行适用于经常性活动   要求“光滑”。换句话说,它适合活动   在短时间内保持频率更重要的地方   比长远来看。这包括大多数动画任务,例如   定期使光标闪烁。它还包括以下任务:   响应人类的输入执行常规活动,例如   只要按住键,就会自动重复一个字符。

     

参数:

task - task to be scheduled.
delay - delay in milliseconds before task is to be executed.
period - time in milliseconds between successive task executions.

示例

Timer timer = new Timer();
int begin = 0;
int timeInterval = 1000;
timer.schedule(new TimerTask() {
  int counter = 0;
   @Override
   public void run() {
       //call the method
       counter++;
       if (counter >= 20){
         timer.cancel();
       }
   }
}, begin, timeInterval);

答案 1 :(得分:1)

尝试执行器服务。您必须自己计算一下,您多久调用一次Callable并取消Timer。

如果它不符合您的要求,则可以遵循以下主题:

Java Timer to call function n times after every t seconds