我有一个spring boot(1.4.1)应用程序,它使用以下Task Executor Configuration:
@Bean ("taskExecutor")
TaskExecutor taskExecutor (Environment env) {
ThreadPoolTaskExecutor t = new ThreadPoolTaskExecutor();
t.setCorePoolSize(Integer.parseInt( env.getProperty("ed.corePoolSize"))); //2
t.setMaxPoolSize(Integer.parseInt( env.getProperty("ed.maxPoolSize"))); //10
t.setQueueCapacity(Integer.parseInt( env.getProperty("ed.queueCapacity"))); //50
t.setThreadNamePrefix(env.getProperty("ed.threadNamePrefix"));
t.setAllowCoreThreadTimeOut(true);
t.setKeepAliveSeconds(Integer.parseInt( env.getProperty("ed.keepAliveSeconds"))); //120
return t;
}
执行此 -
TaskExecutor taskExecutor = (TaskExecutor) beanFactory.getBean("taskExecutor");
taskExecutor.execute(taskNameUpdate);
其中taskNameUpdate是Runnable任务。
当用户发送了17个请求时,它在两个线程中处理了2个请求(假设T1和T2)。当T1完成第一个任务的执行时,它从队列中选择task17,它应该选择task3。更大的问题是当T2完成当前任务时它也开始处理任务17.两个线程都执行任务17并再次开始处理任务17.
作为临时修复,我设置了corePoolSize = 10,并要求不要同时发送超过10批。
请帮我解决问题。