创建多线程java ee

时间:2016-04-12 09:54:30

标签: java multithreading glassfish

是否可以创建多线程Java EE Glassfish容器?

我的目的是创建一个应用程序,用户可以在其中捕获数据启动社交网络,然后每个用户将启动一个新线程,其中包含他想要从社交网络检索信息的参数。 所有这些线程的数量都会受到限制,以避免使用内存服务器。

因为我可以在java ee中创建多个线程,并且一旦用户退出应用程序以保持在后台运行直到用户关闭它们?

一种解决方案可能是玻璃鱼的工作?

1 个答案:

答案 0 :(得分:0)

您的问题非常广泛,但总的来说,我理解您需要为每个用户执行一个线程,即使用户停止使用该应用程序(注销),也会在后台运行,执行一些重复性任务,并由用户终止需要时。

首先,我要指出,这可以通过计时器服务以更干净的方式完成 - 您可以安排定期的后台工作,这将完成您所需要的一切。它可以读取用户及其任务的列表,以给定的间隔执行它们。然后,用户可以请求取消他们的任务 - 他们将从列表中删除他们的任务。

这样,运行后台任务的用户数量不会受到限制。它们也可以在一个线程中按顺序运行,但你可以调整它,看看我的其余部分。

更多关于在Java EE教程中推断计时器:https://docs.oracle.com/javaee/7/tutorial/ejb-basicexamples004.htm

如果每个用户确实需要一个单独的线程,有几种方法可以与请求处理线程分开执行一个线程。您可以使用@Asynchronous注释来使用异步EJB方法调用。您也可以使用ManagedExecutorService注入Runnable并使用它来异步执行submit。在这两种方式中,您都不会失去上下文,依赖注入将继续有效。

在Java EE教程中查看有关Concurrency utilities

的异步执行的更多详细信息

您也可以从计时器异步执行runnables,但是如果您只是在计时器处理程序中执行单个任务,则可能不需要它,因为当计时器在新线程中触发时将执行计时器处理程序,如果是处理程序尚未完成。