Jakarta ee AsyncContext.start()的预期用途是什么?

Jakarta ee AsyncContext.start()的预期用途是什么?,jakarta-ee,servlets,servlet-3.0,Jakarta Ee,Servlets,Servlet 3.0,有人刚刚指出AsyncContext.start()是从Web容器中启动线程的一种方法。我想知道将此调用添加到Java EE的预期用例是什么?AsyncContext.start()不太可能启动新线程。它几乎肯定会使用容器线程(来自用于处理请求的同一线程池)。例如,Tomcat将始终使用来自请求处理线程池的容器线程 用例是指在主线程可以继续之前,您不希望“主”线程必须等待您在Runnable中输入的内容完成的任何情况 我能想到的大多数示例都是精心设计的,但是如果您使用Servlet 3.0 as

有人刚刚指出AsyncContext.start()是从Web容器中启动线程的一种方法。我想知道将此调用添加到Java EE的预期用例是什么?

AsyncContext.start()不太可能启动新线程。它几乎肯定会使用容器线程(来自用于处理请求的同一线程池)。例如,Tomcat将始终使用来自请求处理线程池的容器线程

用例是指在主线程可以继续之前,您不希望“主”线程必须等待您在Runnable中输入的内容完成的任何情况


我能想到的大多数示例都是精心设计的,但是如果您使用Servlet 3.0 async与5个连接的客户端实现了某种消息传递应用程序,那么主线程可能会迭代5个客户端中每个客户端的AsyncContext,并在每个上下文上调用start()以发送广播消息。这样,主线程就不会被速度较慢的客户端阻塞。

您好,谢谢您的回答。但是,没有足够的理由或证据证明您提出的两点:#1:用于将很快完成的工作;和#2:几乎可以肯定使用容器线程#2是#1的合理结果,因此关键问题仍然存在:我们如何知道这确实是预期用例。start()在启动线程方面是通用的;文件中也没有暗示它将是短暂的;因此,启动线程的一般方法允许设计人员启动任意长寿命线程#1不是我提出的观点,#2在规范中有说明,并且由于使用单独的线程池没有明显的好处,而大多数(所有?)容器都认为线程池意味着短命。但我会在规范中读到更多内容。异步API的全部要点是更有效地利用线程。重要的不是运行线程需要多长时间,而是线程正在做有用的工作。一般来说,任务很短,但不一定要很短。使用容器线程池的原因是,它为执行有用工作的并发线程数量设置了一个易于控制的上限。否则,服务器很容易过载。