【问题标题】:Running Java Threads on a Different Server/JVM在不同的服务器/JVM 上运行 Java 线程
【发布时间】:2016-04-01 01:51:41
【问题描述】:

我有一个运行大量线程的有效 Java EE 应用程序。我想将这些线程从我的应用程序中移出,并简单地访问它们的数据(字符串和整数)。

如果我想说在我的 Web 应用程序上调用一个方法来访问不同服务器/JVM 上的线程数据,我应该如何实现?

【问题讨论】:

  • 线程无法移动。你只能在这里摧毁它们并在那里创造。
  • 线程的数据在变化,因此访问线程的数据是一种令人怀疑的乐趣。更好的程序线程,以便他们将数据放入某种输出队列中。
  • @AlexeiKaigorodov 为什么我不能创建一个允许我访问这些线程的 Web 服务?
  • @the1.8gpaProgammer 你可以提供它们在同一个 JVM 中。
  • 正如其他答案所述,您尝试做的事情实际上是不可能的,至少不是您描述的方式。然而,对于您似乎试图解决的问题,有标准的企业架构设计可以让您将大部分处理开销卸载到物理上不同的机器或 java 进程,而您可以远程检索结果

标签: multithreading web-services jakarta-ee jvm


【解决方案1】:

假设您想分离这些层(可能将它们放在不同的机器上或为了可扩展性),您可以将数据层与表示层分离,并将它们放在不同的 JVM 中。您让数据层为表示层提供服务。你如何做到这一点取决于你喜欢的交通工具。例如它可以是 Web 服务,也可以使用 RMI、JMS、TCP、共享内存。

无论如何,一个JVM只能通过JVM暴露的服务来访问另一个进程的数据。 (共享内存的情况除外,但除非您的数据模型非常简单,否则要使其正常工作并不容易)

【讨论】:

  • 我现在正在考虑或使用某种第三方 Web 服务 API。这样我就不必为我的应用程序创建一个全新的 Web 服务(为服务器空间、数据存储等付费)。有没有这样的东西我可以说 www.timerserviceapi.com/webapi/settimer/timerid=1?setseconds=230
  • 然后在我的企业应用程序中只需远程访问该计时器数据
  • 这是一个有趣的服务,实现起来非常简单。可能有一些东西,但我会自己做。注意:如何确保 id 是唯一的?我会使用 UUID。
【解决方案2】:

访问线程数据

在 Java 中,几乎所有数据都在堆上,由许多线程共享。其中很少有完全局限于单个线程。所以移动一个线程并且只移动“它的数据”的想法没有多大意义。

不仅是 Java,几乎任何具有共享可变状态的语言都会面临同样的问题。

当然,您的应用程序可以有线程拥有数据的概念,但这将是应用程序逻辑,而不是 java 本身或其 Thread 类的一部分。

【讨论】:

    猜你喜欢
    • 2011-09-09
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多