【问题标题】:Parallelizing class with static member variables使用静态成员变量并行化类
【发布时间】:2013-09-26 19:28:43
【问题描述】:

我目前正在使用一个执行一些繁重计算工作的应用程序。几年前它已从 C 移植到 Java,并且显示了一些。其中,它使用公共静态变量在类之间共享数据。

这项工作非常适合并行处理,因为要处理多个文件,并且每个文件都可以完全独立于其他文件来完成。但是由于静态变量,仅仅启动多个线程是行不通的。我想防止重写,因为这些类非常快速、成熟且没有错误。

我是否有一种简单的方法可以从 java 程序中启动多个线程/进程,其中每个线程都将拥有自己的静态变量副本,或者我是否必须通过执行命令多次调用 JVM?

【问题讨论】:

  • 我认为标准 JVM 没有任何“应用程序域”支持 .. 但是可能有一些巧妙的技巧或使用不同类加载器的方法?如果您无法更改代码(这是一种“已知的工作”方法),我将使用单独的进程来增加隔离 - 假设所述进程具有并发能力。

标签: java multithreading static


【解决方案1】:

是的,您可以使用多个类加载器,或者启动多个进程。

但是,我建议只修复代码,这样会简单得多。将所有静态字段设为非静态字段,并有一个 ThreadLocal 变量来保存该线程的实例副本。

【讨论】:

  • 我会说调用java.exe Class arguments 几次(从而启动多个进程)比更改复杂代码的 5K LOC 简单得多,特别是如果代码没有错误并且性能良好.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多