我从http://docs.oracle.com/javaee/7/tutorial/doc/servlets012.htm
读到Java EE为servlet和过滤器提供异步处理支持。如果servlet或过滤器在处理请求时达到可能阻塞的操作,它可以将操作分配给异步执行上下文,并立即将与请求关联的线程返回到容器而不生成响应。阻塞操作在不同线程中的异步执行上下文中完成,它可以生成响应或将请求分派给另一个servlet。
我想知道
在哪里不同的帖子
来自哪里?假设容器有10个线程,其中5个是处理请求,我们必须使用另外5个来处理长时间运行的业务逻辑?我们在哪里获得性能提升?可用的总线程数是有限的,对吗?
感谢。
答案 0 :(得分:1)
详细了解Servlet 3 0 final-spec - Section 2.3.3.3 - Asynchronous processing详情。
它使容器调度一个线程,可能来自托管线程池,以运行指定的Runnable
。 AsyncContext
是 Servlet 3.0规范中定义的标准方式,用于异步处理HTTP请求 。
基本上HTTP请求不再绑定到HTTP线程,允许我们稍后处理它,可能使用更少的线程。事实证明,规范提供了一个API来处理开箱即用的不同线程池中的异步线程。
阅读有关创建线程池的Executors.newFixedThreadPool()
的更多信息,该线程池重用在共享无界队列中运行的固定数量的线程。在任何时候,最多nThreads线程将是活动的处理任务。如果在所有线程都处于活动状态时提交了其他任务,则它们将在队列中等待,直到线程可用。
请查看ExecutorService
以了解更多相关信息以及示例代码。