我有以下设置,每隔X秒,它将调用Async
方法,该方法将包含新项的列表传递给它。 Async
具有自定义的Executor
,如下所示
@Bean(name = "workExecutor")
public Executor getWorkAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(40);
// executor.setMaxPoolSize(40);
executor.setQueueCapacity(10000000);
executor.setThreadNamePrefix("workExecutor-");
executor.initialize();
return executor;
}
以下类的方法每隔X秒/分钟执行一次(在这种情况下,每5秒执行一次),并将列表传递给run
中的ThreadClass
方法
@Component
public class ScheduledClass {
@Autowired
MyRepository myRepository;
@Autowired
ThreadClass threadClass;
@Scheduled(cron= "*/5 * * * * *")
public void callThreadClass() {
try {
List<String> list = myRepository.getList();
for (int i = 0; i < myRepository.size(); i++) {
threadClass.run(myRepository.get(i));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("---------------------");
}
}
}
完成所有工作的ThreadClass
@Component
public class ThreadClass {
@Async("workExecutor")
public void run(String str) {
try {
//do all the work
} catch (Exception e) {
e.printStackTrace();
} finally {
}
}
}
如果run方法尚未完成先前的工作,并且callThreadClass
方法执行并传递run
新列表,将会发生什么?列表是否添加到队列中,取代了旧列表?