Я создал сервер Jetty с пулом потоков, чтобы ограничить количество одновременных запросов к серверу. Но размер, который я указываю, общий размер запроса, который я могу сделать, всегда на 5 меньше, чем указанный мной размер.
Зависимость:
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>9.4.6.v20170531</version>
</dependency>
Код сервера:
public void httpServer(int port, Handler handler, String name) {
QueuedThreadPool threadPool = new QueuedThreadPool(10);
Server server = new Server(threadPool);
server.setHandler(handler);
HttpConfiguration http = new HttpConfiguration();
ServerConnector serverConnector = new ServerConnector(server, new HttpConnectionFactory(http));
serverConnector.setPort(port);
server.setConnectors(new Connector[]{serverConnector});
try {
log.info(name + " Listener Started on port: " + port);
server.start();
server.join();
} catch (Exception e) {
log.error("Unable to start Server... Exiting");
log.error(e, e);
System.exit(1);
}
}
Обработчик:
public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) {
try {
BufferedReader bufferedReader = request.getReader();
String s;
StringBuilder sb = new StringBuilder();
PrintWriter writer = response.getWriter();
while ((s = bufferedReader.readLine()) != null) {
sb.append(s);
}
System.out.println("Got Request");
Thread.sleep(2000);
response.setStatus(HttpServletResponse.SC_OK);
baseRequest.setHandled(true);
} catch (Exception e) {
e.printStackTrace();
}
}
В приведенном выше коде указан размер ThreadPool, равный 10. Но одновременно я могу сделать только 5. Яя пытался изменить размер до 20, но в этом случае одновременный запрос, который я могу сделать, всегда на 5 меньше, т. е. 15. Есть идеи, где эти 5 потоков используются?