【问题标题】:Spring - scheduling and pooling runnables of different state (each Runnable instance has different state)Spring - 调度和池化不同状态的可运行对象(每个 Runnable 实例具有不同的状态)
【发布时间】:2011-03-02 14:16:54
【问题描述】:

我不知道用什么来调度和汇集不同状态的可运行对象(每个 Runnable 实例都有不同的状态)。我可以将 ScheduledExecutorFactoryBean 与 MethodInvokingRunnable 一起使用来提供参数。但是看看关键的 ScheduledExecutorFactoryBean 方法,它被设计成所有任务都应该从头开始。

    protected void registerTasks(ScheduledExecutorTask[] tasks, ScheduledExecutorService executor) {
        for (ScheduledExecutorTask task : tasks) {
            Runnable runnable = getRunnableToSchedule(task);
            if (task.isOneTimeTask()) {
                executor.schedule(runnable, task.getDelay(), task.getTimeUnit());
            }
            else {
                if (task.isFixedRate()) {
                    executor.scheduleAtFixedRate(runnable, task.getDelay(), task.getPeriod(), task.getTimeUnit());
                }
                else {
                    executor.scheduleWithFixedDelay(runnable, task.getDelay(), task.getPeriod(), task.getTimeUnit());
                }
            }
        }
}

我想不出如何使用 ThreadPoolTask​​Scheduler 设置这个场景。

请帮帮我。谢谢


编辑:缩短版是:如何设置任务调度程序,以 2 秒的间隔运行数百个“不同的线程实例(具有不同的状态)。

【问题讨论】:

  • 我认为我可以使用 AnnotationConfigApplicationContext 来设置 ScheduledExecutorFactoryBean 和多个 ScheduledExecutorTasks,每个 ScheduledExecutorTasks 都有 MethodInvokingRunnable 并提供不同的参数值......对我来说听起来不错
  • 我想要做的是安排代表http get请求的线程(每个都有不同的代理和目标),每个线程在前一个后几秒钟开始,有数千个,连接持续到30 秒,这样我就需要它并发
  • 现在我认为 taskScheduler 绝对不应该用于我想做的事情。他们应该安排一个不可变的任务/可运行的。对吧?

标签: spring threadpool


【解决方案1】:

这很简单,我不知道我在想什么,我没有看到它:-)


我刚刚以编程方式在 ScheduledExecutorFactoryBean 的数组 ScheduledExecutorTask[] 中填充了数千个任务,每个任务都具有递增的延迟属性和不同的可运行对象。然后我就用了 factorybean...spring 家伙的 factorybean 真的很方便...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 2011-06-06
    相关资源
    最近更新 更多