我是 JSF 新手,我需要使用 Threads 来处理 google 地图。我正在使用 primefaces 进行谷歌地图,但我需要在后台执行一个线程以从数据库获取纬度和经度,然后在地图中绘制标记。
您的问题并非特定于 JSF,而是针对一般的 Web 应用程序。那么,如何在 Java Web 应用程序中异步执行任务呢?绝对不是通过创建自己的线程。
Java Web 应用程序在应用程序服务器(例如 jBoss)中运行。应用程序服务器负责为您管理 Java 线程。例如,它将为每个传入的 Web 请求使用一个单独的线程。应用程序服务器创建一个线程池并重用这些线程,因为始终创建新线程的成本较高。这就是为什么您不应该创建自己的,特别是如果它是为每个 Web 请求创建的,因为它将直接影响可扩展性。
为了异步执行任务,您可以使用 ejb @Asynchronous 注释(假设应用程序在 jBoss 等 Java EE 容器中运行,但不是 Tomcat)。
import javax.ejb.Singleton;
@Singleton
public class AsyncBean {
@Asynchronous
public void doSomethingAsynchronously() {
// when this EJB is injected somewhere, and this method is called, it will return to the caller immediately and its logic will run in the background
}
}
如果应用程序未在 Java EE 容器中运行,请查看这个答案 https://stackoverflow.com/questions/10932983/asynchronous-tasks-in-java-web-app它很好地列出了 Web 应用程序中异步处理的一些其他选项。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)