使用ScheduledTaskRegistrar在多线程上划分任务

时间:2016-01-29 18:35:39

标签: java multithreading spring-boot scheduled-tasks threadpool

我有一个从数据库加载的对象Feed列表,然后我使用这些对象通过属性UrlFeed访问互联网并做一些工作来从每个Feed获取项目,问题是我使用一个线程并输出时间取决于List的大小,因此如果列表变大,输出时间将增加。我想使用多个线程并减少此输出时间。我想知道如何将此任务划分为多个线程,或者如何减少输出时间?

我使用Spring Boot并与ScheduledTaskRegistrar一起定期安排任务 这是我的配置类:

@SpringBootApplication
@EnableScheduling
public class MyApp implements SchedulingConfigurer {

public static void main(String[] args) {
    SpringApplication.run(MyApp.class, args);
}

@AutoWired
TaskConfig tC;


@Bean(destroyMethod = "shutdown")
public Executor taskExecutor() {
    return Executors.newScheduledThreadPool(20);
}

@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {

    taskRegistrar.setScheduler(taskExecutor());

    taskRegistrar.addTriggerTask(
            new Runnable() {
                @Override 
                public void run() {

                    for(Feed f : getListFeed()){

                          accessToFeedAndDoSomeWork(f.getUrlFeed);
                    }


                    }
                }, 
            new Trigger() {

                    @Override
                    public Date nextExecutionTime(TriggerContext triggerContext) {
                        Calendar nextExecutionTime =  new GregorianCalendar();
                        Date lastActualExecutionTime = triggerContext.lastActualExecutionTime();
                        nextExecutionTime.setTime(lastActualExecutionTime != null ? lastActualExecutionTime : new Date());
                        nextExecutionTime.add(Calendar.MILLISECOND, tC.getRate);
                        return nextExecutionTime.getTime();
                    }
                });



}
}

是否有ScheduledTaskRegistrar的解决方案,感谢您的帮助

0 个答案:

没有答案