Я использую асинхронную задачу для обработки больших запросов, мои данные ниже
@Configuration
@EnableAsync
public class AsyncConfiguration
{
@Bean(name = "asyncExecutor")
public Executor asyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(10);
executor.setMaxPoolSize(10);
executor.setQueueCapacity(100);
executor.setThreadNamePrefix("AsynchThread-");
executor.initialize();
return executor;
}
}
@Service
public class AsyncService {
@Async("Executor")
public void processData(User user) throws InterruptedException
{
/* my business logic for each user*/
return ;
}
}
Здесь я получаю список пользователей, он может содержать 50 пользователей, поэтому перед публикацией в асинхронной задаче я хочу знать, что у меня достаточно емкости очереди для хранения 50 потоков, если нет, я должен вернуться к вызывающей стороне, говоря, что мой сервер занят.
@RequestMapping(value = "/users", method = RequestMethod.POST)
public void postAllUsers(@RequestBody List<User> users) throws InterruptedException, ExecutionException
{
for (List<User> user: users)
{
try {
service.processData(user);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Так как узнать текущее использование очереди?