代码之家  ›  专栏  ›  技术社区  ›  dudi

在java中,如何在y时间内每隔x秒执行一个方法

  •  2
  • dudi  · 技术社区  · 7 年前

    我想每秒执行一个方法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 回复  |  直到 7 年前
        1
  •  11
  •   Naman    7 年前

    使用 timer.schedule() ,并跟踪计时器的执行次数,并在20次后停止计时器,使用 timer.cancel()

    java doc - time schedule

    为重复的固定延迟执行计划指定的任务, 在指定的延迟之后开始。随后执行处决

    在固定延迟执行中,每个执行都是相对于 由于任何原因(如垃圾收集或其他背景)而延迟 随后的执行也将延迟。长远来看 运行时,执行频率一般会略低于 指定周期的倒数(假设系统时钟 基础对象。等待(长)是准确的)。

    固定延迟执行适用于 要求“平滑”。换句话说,它适合于活动 在短时间内保持频率准确更为重要 长跑比长跑更重要。这包括大多数动画任务,例如 定期活动是为了响应人工输入而执行的,例如

    参数:

    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);
    
        2
  •  2
  •   Shahinoor Shahin    7 年前

    试试Executor服务。你必须计算你自己,你多久打一次电话,并取消计时器。

    如果它不符合您的要求,您可以遵循以下线程:

    Java Timer to call function n times after every t seconds