Java 我应该管理异步任务还是让容器来管理(servlet 3)

Java 我应该管理异步任务还是让容器来管理(servlet 3),java,servlets,servlet-3.0,Java,Servlets,Servlet 3.0,使用request.startAsync()可以获得asyncContext,您可以start()。从那里,servlet容器管理传递的Runnable的生命周期,同时原始线程完成并返回到池中 我应该依赖我的Runnables的servlet容器管理,还是最好创建(例如)一个上下文范围的队列,并使用执行器的固定线程池来处理创建的asyncContext(而不实际启动它们) 这样,我就可以更好地控制异步工作和可配置线程(我不知道您是否可以按照规范在servlet容器上配置它?我的理解是,您需要自己

使用
request.startAsync()
可以获得
asyncContext
,您可以
start()
。从那里,servlet容器管理传递的
Runnable
的生命周期,同时原始线程完成并返回到池中

我应该依赖我的
Runnable
s的servlet容器管理,还是最好创建(例如)一个上下文范围的
队列
,并使用执行器的固定线程池来处理创建的
asyncContext
(而不实际启动它们)


这样,我就可以更好地控制异步工作和可配置线程(我不知道您是否可以按照规范在servlet容器上配置它?

我的理解是,您需要自己处理生成的可运行程序,将它们传递给执行者/执行者服务。这不是servlet容器将为您处理的事情

通过请求一个AsyncContext,实际上是告诉servlet容器不要保留一个线程来处理这个请求,并且将最终的响应生成(在旧的同步世界中)封装在一个可运行的AsyncContext中。此时,您将看到Runnable运行,并生成响应。但它如何执行取决于您:队列、优先级、线程池大小等

我想说像一个线程池执行器和一个队列这样的东西会很好地工作。这样,如果您希望在当前进行中的数量达到一定大小后开始拒绝请求,您可以自己选择如何拒绝请求(服务过载响应或类似)