java - 在 Servlet 调用之外的 Java 应用程序服务器中启动线程或加载共享资源的最佳实践是什么?

标签 java jakarta-ee application-server

抽象问题

将资源加载到将在 Java 应用程序服务器中的 servlet 之间共享的内存中的最佳方法是什么?

我实际上在做什么

我想创建一个监视队列的守护线程。该队列可以有从 servlet 线程添加到其中的对象。线程将等待一段时间并检查队列以查看其中是否有项目,如果有,则它将处理它们并删除它们。该线程需要在某个时间的某个地方启动。我在想,仅实现了 init 方法的 servlet 就可以完成此任务,或者是否有更好的地方可以将这样的启动代码放入应用程序服务器中?我是不是在解决这个问题时很奇怪?

更新

我找到了this question公认的答案是使用 LifeCycle Listener。这是一种可移植的处理方式,还是我的代码将绑定(bind)到单个应用程序服务器。经过更多调查,我在留言板上发现了一些帖子,说我可以在 ServletContextListener 中执行此操作。实现。

最佳答案

我通常使用您描述的方法从 Servlet 间接启动这些类型的工作线程(通常它们存在于执行队列提取并控制处理的其他对象内)。

为了将对象从线程中拉出,您不需要根据时间来执行此操作,您可以让您的线程在队列对象上等待(),并且当某个其他线程将对象放入队列时,该线程会在队列上调用notify()来释放正在监视的“工作”线程。

谷歌“java工作线程等待通知”有很多例子。

关于java - 在 Servlet 调用之外的 Java 应用程序服务器中启动线程或加载共享资源的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4241370/

相关文章:

java - 使用接口(interface)名称将 jar 添加到 java 应用程序

java - 在 Tomcat 和 Websphere 上部署时有什么区别?

perl - 我应该使用什么标准来评估 Perl "app server"(mod_perl 替换)?

tomcat - Servlet 映射到默认/在 tomcat 中

java - 我可以在使用 Cordova 的 iOS 应用程序中使用 Java 库吗?

java - 转换日期时出错 : Unparseable date in JAVA

javascript - JEE Servlet/JS : document. cookie 在 Chrome 和 IE 之间不返回相同的东西

java - WebLogic 应用程序中没有任何组件

java - 如何仅在一个类中制作 2 个可比较的方法?

java - 软件包android.support.v7.internal.widget不存在,软件包AdapterViewCompat不存在