gpt4 book ai didi

java - 在 Java Web 应用程序中执行异步操作的最简单方法

转载 作者:搜寻专家 更新时间:2023-11-01 00:53:43 25 4
gpt4 key购买 nike

我有基于 Java servlet 的 Web 应用程序。我想以异步方式实现一些操作,例如写入日志。

我想避免 JMS 开销并做一些简单的事情。

在服务器环境中自己管理线程似乎不是一个好主意,您可能需要利用服务器线程池等。简单异步操作的最佳替代方案是什么?

编辑:

只是为了澄清,因为许多人建议使用 log4j 或其他日志记录库,所以写入日志操作在这里更多的是一个例子。我对如何异步执行不需要按顺序执行的任何操作感兴趣。想法是立即回复用户并在另一个线程中继续处理昂贵的操作。

关于日志问题,我们实现了审计日志,将大量数据写入数据库,供用户在审计操作期间和帮助台使用。将大量信息写入数据库可能会非常昂贵。我们确实将 log4j 用于系统日志,并且由于附加程序是文件附加程序,我们的系统日志没有性能问题。

最佳答案

正如许多人在这里所说的那样,日志记录不是异步的理想选择。尽管如此,我认为你有充分的理由不相信。

在这种情况下,我会使用队列(例如 ConcurrentLinkedQueue)和低优先级线程(您在应用程序启动时启动并在关闭时终止,例如,从启动时运行的 servlet)。线程应该从队列中挑选消息,然后执行它。线程应通过 notify() 方法或等间隔唤醒。

风险:队列可能在重负载下不受控制地增长(因为线程可能无法获得足够的 CPU 周期)。

还有其他方法可以触发异步操作(例如 Timer、Future 等),但我认为它们不适合快速的小型操作。

关于java - 在 Java Web 应用程序中执行异步操作的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1798357/

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