Java 如果ServerConnector已经配置了AcceptQueueSize,是否需要为QueuedThreadPool指定BlockingQueue?

Java 如果ServerConnector已经配置了AcceptQueueSize,是否需要为QueuedThreadPool指定BlockingQueue?,java,server,jetty,threadpool,jetty-9,Java,Server,Jetty,Threadpool,Jetty 9,在创建Jetty Server和Jetty ServerConnector时 QueuedThreadPool pool = new QueuedThreadPool(minThread,maxThread,new BlockingArrayQueue()); Server server = new Server​(pool); /*rest code blah blah*/ ServerConnector servConn = ServerConnector​(server, acceptor

在创建Jetty Server和Jetty ServerConnector时

QueuedThreadPool pool = new QueuedThreadPool(minThread,maxThread,new BlockingArrayQueue());
Server server = new Server​(pool);
/*rest code blah blah*/
ServerConnector servConn = ServerConnector​(server, acceptors, selectors, sslContextFactory);
/*rest code blah blah */
int acceptQueueSize = getAcceptQueueSize();
servConn.setAcceptQueueSize(acceptQueueSize);
/*rest code blah blah */
QTP的BlockingArrayQueue与设置ServerConnector的setAcceptQueueSize之间有什么关系? 如果在构造函数中使用maxCapacity参数设置BlockingArrayQueue,则acceptQueueSize是否会影响此maxCapacity

在上面的代码中,我使用了BlockingArrayQueueSize的基本构造函数,请查看下面的其他构造函数链接。请参考下面的链接,了解上面代码块中的其他引用类

服务器连接器 队列线程池 阻塞阵列队列
BlockingQueue队列的QueuedThreadPool构造函数参数适用于需要调整Jetty环境以获得极低系统利用率和/或JVM限制的嵌入式系统用户

Jetty可以并且确实运行在只有16MB RAM的嵌入式系统上

如果您使用的是OpenJDK或任何衍生工具,那么请不要更改队列类型,除非您完全(我的意思是100%)了解将在其上运行的硬件上运行的JVM的行为。几乎总是建议使用默认的BlockingQueue实现


如果您正在考虑使用某种替代/调整/配置的BlockingQueue来实现某种负载或资源利用率限制,那么您就走错了路。Jetty不是一个1线程/1连接类型的容器,单个连接可能导致在该单个连接的整个生命周期内使用多个不同的线程。在Jetty中使用各种技术也会改变您对Jetty的线程需求。对于您来说,使用一个请求建立一个连接非常容易,使用多个线程来服务该请求,这一切都取决于您在该请求期间的决定。

您不希望在线程/线程池/连接器/etc级别处理此问题。使用QoSFilter和/或DoSFilter管理实时系统上的资源。一种即使使用服务器繁忙样式的响应也可以始终响应HTTP请求的方法。