弹跳多任务执行延迟

时间:2012-01-04 13:15:58

标签: java spring

我有一个spring 3.0 app,它连接到WebService。 Web服务请求限制为每秒1次,我需要触发~1000个请求,每个请求之间有1秒的延迟。 我尝试使用Spring TaskExecutor进行操作,并且我找到了示例here

但是如何在每个taskExecutor.execute调用之间设置1秒的延迟?

示例I中的代码使用:

    import org.springframework.core.task.TaskExecutor;

    public class TaskExecutorExample {

      private class MessagePrinterTask implements Runnable {

        private String message;

        public MessagePrinterTask(String message) {
          this.message = message;
        }

        public void run() {
          System.out.println(message);
        }

      }

      private TaskExecutor taskExecutor;

      public TaskExecutorExample(TaskExecutor taskExecutor) {
        this.taskExecutor = taskExecutor;
      }

      public void printMessages() {
        for(int i = 0; i < 25; i++) {
          taskExecutor.execute(new MessagePrinterTask("Message" + i));
        }
      }
    }

2 个答案:

答案 0 :(得分:0)

它叫做fixedDelay或fixedRate,具体取决于你需要什么

<task:scheduled-tasks scheduler="myScheduler">
    <task:scheduled ref="someObject" method="someMethod" fixed-delay="1000"/>
    <task:scheduled ref="someObject" method="someOtherMethod" fixed-rate="1000"/>
 </task:scheduled-tasks>

  @Scheduled(fixedDelay=1000)

  @Scheduled(fixedRate=1000)

在Spring Reference中有详细记录,您可以从

中获取示例

答案 1 :(得分:0)

TaskExecutor不是用于此的正确接口,它用于即发即弃“随时执行此操作”操作。您应该使用TaskScheduler代替。这提供了scheduleAtFixedDelayscheduleAtFixedRate等方法。

查看javadoc以阅读这些方法的说明 - 小心,它非常微妙。