![](/img/trans.png)
[英]How to require client certificate authentication in only specific java servlets?
[英]Async feature in Servlets
我只是回到Servlet-3.x
功能并进行了探索。 如果我没看错,则在Servlet-3.x之前,它是每个请求模型的线程,它将耗尽池中的线程,从而导致大量传入流量。
因此,使用Servlet-3.x表示它是异步的,不会使线程保持阻塞状态,而是立即释放它们,而只是委派任务。
这是我的解释,
考虑服务器线程池中有2个线程
对于新的异步servlet请求R1
有一个线程T1
,该T1
将委派任务, T2
和T1
立即响应回客户端。
问题: T2
是从服务器线程池创建的吗? 如果是这样,我不明白这一点。
情况1:如果旧的同步Servlet请求T1
一直在忙于运行I / O任务,
情况2:如果是异步Servlet调用,则T2
正在忙于运行I / O任务。
在这两种情况下,其中一个都很忙。
我尝试在openliberty
应用服务器中使用示例异步Servlet进行openliberty
,以下是从示例演示Servlet捕获的示例日志。
Entering doGet() == thread name is = Default Executor-thread-116
Exiting doGet() == thread name is = Default Executor-thread-116
=== Long running task started ===
Thread executing @start of long running task = Default Executor-thread-54
Thread executing @end of long running task = Default Executor-thread-54
=== Long running task ended ===
如上所示, Default Executor-thread-116
立即释放,并将长期运行的任务委托给Default Executor-thread-54
,但是我不确定它们是否来自App Server线程池。 如果是这样,为什么不能仅由Default Executor-thread-116
执行任务而不是委派?
有人可以阐明JavaEE中Servlet的这种异步行为吗
在您的示例中,工作是同步的,没有单独的执行程序/线程池,几乎没有意义使用异步servlet。 许多示例/示例在第二个线程上只是块,因为它们试图仅说明语法。
但是没有理由不让您无法剥离线程来做一些工作,将异步上下文添加到某个列表,然后在某个事件(入站JMS,websocket等)提供完成异步响应所需的数据之后。 例如,一个2人游戏服务器不会在第二个线程中等待玩家2,而只是将他们的异步上下文在内存中浮动,以等待第二个玩家找到它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.