在多个jvm实例中运行java代码

在多个jvm实例中运行java代码,java,testing,concurrency,jvm,Java,Testing,Concurrency,Jvm,我有一个windows服务应用程序和一个使用RMI与服务通信的客户端。 我需要对多个客户机进行并发测试,但我需要每个客户机运行到不同的jvm实例,因为它的代码中有一些静态变量。 我可以这样做吗?有什么想法吗 是的,您可以使用JDI(可以通过调用Bootstrap.virtualMachineManager();)提供(至少一个)。然后可以调用launch(),它为您提供了它创建的VM的配置。然后,此镜像允许您在此VM上远程执行方法 您可以使用这种方法设置任意数量的远程虚拟机,尽管这样做显然会带来

我有一个windows服务应用程序和一个使用RMI与服务通信的客户端。 我需要对多个客户机进行并发测试,但我需要每个客户机运行到不同的jvm实例,因为它的代码中有一些静态变量。
我可以这样做吗?有什么想法吗

是的,您可以使用JDI(可以通过调用
Bootstrap.virtualMachineManager();
)提供(至少一个)。然后可以调用
launch(),它为您提供了它创建的VM的配置。然后,此镜像允许您在此VM上远程执行方法


您可以使用这种方法设置任意数量的远程虚拟机,尽管这样做显然会带来相对较大的性能损失,而且这需要付出相当大的努力。除非付出的努力是天文数字,否则我个人主张修复代码以保证线程安全(使用
ThreadLocal
),然后您就不必担心JDI(或类似的设置)。

您可以使用shell脚本在循环中生成一个具有自己参数集的新客户端


但是,总的来说。仅仅因为共享了一些静态变量就在多个VM中运行客户机代码肯定不是一个好的解决方案。根本问题在于您的客户端代码中,正如前面所建议的,您可以使用
ThreadLocal
ThreadPools
或一些同步逻辑来隔离不同客户端线程之间的一组变量

您是否绝对确定需要每个客户机在自己的JVM上运行?i、 你不能让并发RMI客户端在一个JVM的线程池中运行吗?客户端代码中有一些静态变量,所以当我在同一个JVM实例中运行多个客户端时,会出现一些冲突。我打赌你知道ThreadLocal,但你和我一样懒惰。只需复制JRE目录N次就可以了。OP:修复它们,对吗?i、 e.确保所有共享可变状态的线程安全。有几十个java文件带有静态变量,因此更改所有这些文件不是很现实。谢谢用户1540341