gpt4 book ai didi

java - tomcat启动时创建任务线程的正确方法

转载 作者:行者123 更新时间:2023-11-28 22:42:24 24 4
gpt4 key购买 nike

<分区>

阅读了很多不同的东西并且不完全熟悉其中一些东西的正确术语,我想知道在 tomcat 启动时创建线程的正确方法是什么特定目的。我使用的是 linux 系统。

我不是要从 servlet 创建线程,我很清楚为什么这样做不好。当 tomcat 启动时,我想要启动两个具有不同目的的不同线程。第一个线程每隔 30 分钟运行一次,以审核后端数据。第二个线程负责发送邮件。当一个请求运行一个必须发送电子邮件的 servlet 时,我不想让 servlet 等待电子邮件发送,而是向这个电子邮件线程发送一个请求并继续。因此,一个定期运行,一个按需运行。我永远不需要增加执行这些任务的线程数,我只需要这两个线程,只要 webapp 正在运行,它就会一直运行,如果 webapp 必须停止,我真的不在乎优雅关机。

我知道有几种方法可以采用:

  1. 创建一个在 tomcat 的外部 运行的进程,并定义一种从我的 servlet 与该进程通信的方式。如果可能,我想避免这种情况,因为我希望这两个线程首先直接与 webapp 的启动和关闭相关联,并且让它们能够访问 ServletContext< 中的数据,并且不必通过通信 channel 对数据进行 ser/des 操作。

  2. 在我的一个 servlet 的 init 方法中生成两个线程。这看起来很肮脏和骇人听闻,但它肯定能完成工作。

  3. 创建一个扩展 ThreadPoolExecutor 或其他 ExexutorServiceServletContextListener。这看起来很有吸引力而且是正确的,我想我可以做一个固定的 2 线程线程池,因为我不再需要了。但这是做我正在尝试的事情的推荐方法吗?我知道 ExecutorService 实际上更适合动态执行 Runnable,而不必失去创建线程的开销。我不知道这是否完全正确,但如果是这样,我就不会将执行程序用于其预期目的。

也许还有更多我不知道的方法,或者实现上述方法之一的正确方法。

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