确切的行为可能没有记录,因此可以在不同版本之间更改详细信息,以改进行为。您可以通过查看javacores或从各种文档中收集信息来推断行为,例如
IBM WebSphere Application Server Performance Cookbook
文件:
线程池请求缓冲区本质上是
线程池。如果线程池达到其最大大小
线程被调度,然后工作将在requestBuffer中排队。
requestBuffer的最大大小等于线程池
最大尺寸;但是,如果工作单元在线程上执行
阻塞模式为EXPAND_WWHEN_QUEUE_IS_FULL_ERROR_AT_LIMIT的池
或EXPAND_WWHEN_QUEUE_IS_FULL_WAIT_AT_LIMIT,则最大大小为
ThreadPoolMaxSize*10。当requestBuffer填满时
WSVR0629I已发出(尽管每个JVM只有第一次发出
每个线程池运行)。当requestBuffer已满时,工作将
等待或抛出ThreadPoolQueueIsFullException,具体取决于
执行工作单位。
在实践中,这意味着在maxThreads线程忙于执行工作之后,额外的maxThreads请求将在有界缓冲区中排队,当该缓冲区已满时,套接字线程将阻塞,直到它可以对工作进行排队,这意味着您将阻塞更多的传入请求,直到线程变为可用并在有界的缓冲区中腾出空间。