Я хотел, чтобы проанализировать улучшение я могу видеть, позволяя ASync контроллеры в Spring Ботинок по сравнению с обычным контроллеромАсинхронный пружинные Контроллеры против обычных контроллеров
Так вот мой тестовый код. Один API возвращает Callable, а другой - обычный API-интерфейс контроллера. Оба API, блок для 10secs имитации длительных задач
@RequestMapping(value="/api/1",method=RequestMethod.GET)
public List<String> questions() throws InterruptedException{
Thread.sleep(10000);
return Arrays.asList("Question1","Question2");
}
@RequestMapping(value="/api/2",method=RequestMethod.GET)
public Callable<List<String>> questionsAsync(){
return() -> {
Thread.sleep(10000);
return Arrays.asList("Question2","Question2");
};
}
я создать внедренный кота с этой конфигурацией т.е. только один TOMCAT обработки резьбу:
server.tomcat.max-threads=1
logging.level.org.springframework=debug
ожидание для/API/1 Поскольку существует только одна нить tomcat, другой запрос не будет рассмотрен до тех пор, пока это не будет обработано после 10 секунд
Результаты: Удовлетворение ожиданий
ожидания для/API/2 Поскольку мы сразу же возвращаются вызываемым, единственный кот поток должен получить бесплатно обработать другой запрос. Callable будет внутренне запускать новый поток. Поэтому, если вы нажмете один и тот же api, он также будет принят.
Результаты: Этого не происходит, и до тех пор, пока вызываемый не исполнится полностью, дальнейший запрос не будет рассмотрен.
Вопрос Почему/api/2 не работает должным образом?
Tomcat запускает threadpool, вы ошибаетесь. –
@RomanC Я упоминал в вопросе, я установил threadpool tomcat, чтобы он содержал только 1 поток. – hellojava
Просто, чтобы быть уверенным: какой «другой запрос» вы подаете, пока спящая весенняя нить? –