我有一个场景,我必须注册多个用户,然后与线程并行运行作为注册用户的数量,并由所有用户并行执行相同的一组操作。为此,我有一个 jmx,它的操作很少,应该只发生一次(在一个线程数的设置线程中)和另一个线程组,它运行 5 个线程,这是先前注册用户的数量,我执行一些操作使用这些用户。现在我想使用 5 个线程并行执行整个场景。
我怎么会这样做?
我使用了包含控制器,但线程组未按预期执行,对于包含的 jmx 中的 5 个线程组中发生的操作,我没有获得 25 次迭代。
我有一个场景,我必须注册多个用户,然后与线程并行运行作为注册用户的数量,并由所有用户并行执行相同的一组操作。为此,我有一个 jmx,它的操作很少,应该只发生一次(在一个线程数的设置线程中)和另一个线程组,它运行 5 个线程,这是先前注册用户的数量,我执行一些操作使用这些用户。现在我想使用 5 个线程并行执行整个场景。
我怎么会这样做?
我使用了包含控制器,但线程组未按预期执行,对于包含的 jmx 中的 5 个线程组中发生的操作,我没有获得 25 次迭代。
我不确定您在做什么,而且我对 jmx 知之甚少,但这里有一些想法。一个(或两个)可能是相关的。
第一个是您的线程可能正在共享一个实例字段。例如,如果他们有一个共同的计数器,你会做 5 次而不是 25 次。确保您的公共变量(实例和类字段)正确同步。尽可能使用局部变量。当它们的值适用于每个线程而不是所有线程时,您必须使用它们。
第二个是您可能在所有线程完成工作之前显示结果——或事件停止程序。这在单核机器上是最糟糕的,但是线程可以并且确实以任何可以想象的顺序运行,并且以一些不是的顺序运行。他们可以一次运行一个,最后一个开始运行。一个可以在中间停下来,让另一个运行完成,然后重新启动。一堆可以同时运行(在不同的内核上或快速交换),而其他人什么也不做。
我建议放入一堆日志/输出语句(System.out.println 已经足够好了),然后自己看看发生了什么。你需要一些时间来理解你的输出,但是一旦你这样做了,你就可以开始控制事情了。