gpt4 book ai didi

java - 我应该管理我的异步任务还是让容器来管理(servlets 3)

转载 作者:行者123 更新时间:2023-11-29 08:50:54 26 4
gpt4 key购买 nike

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

我应该依靠 servlet 容器管理我的 Runnable 还是创建(例如)上下文范围的 Queue 并使用例如 fixed 会更好执行程序的线程池来处理创建的asyncContext(实际上没有启动它们)?

这样我可以更好地控制异步工作和可配置线程(我不知道你是否可以根据规范在 servlet 容器上配置它?)

最佳答案

据我了解,您需要自己处理生成的 Runnable,方法是将它们传递给 Executor/ExecutorService。这不是 servlet 容器会为您处理的事情。

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

我会说像带有队列的 ThreadPoolExecutor 这样的东西会工作得很好。这样一来,如果您希望在当前进行中的数量达到特定大小时开始拒绝请求,您可以自己选择如何执行此操作(服务过载响应或类似操作)。

关于java - 我应该管理我的异步任务还是让容器来管理(servlets 3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22757621/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com