jmx 是否为每次调用创建一个新线程?

Does jmx create a new thread for each invocation?

我有一个带有非易失性字段的 class,在 get 方法中有一个 mBean。

class Foo {
   int x;
   int get() {  return x; }
}

我能确定mBean 会得到变量的最新值吗? 更一般地说,jmx 如何调用方法,它是否在每次调用时创建一个新线程? (这样的话,保证我们得到的是最新的值)

是的,您将获得最新值,具体取决于 x 以同步方式 read/written。如果它是原始类型,请考虑使用 AtomicInteger(或 AtomicDouble 等)以避免自己编写同步构造。

JMX 是否为每次调用创建一个新线程可以通过在您的 get() 方法中添加以下行来简单地发现:

System.out.println("get() executed by thread: " + Thread.currentThread().getName());

这将打印线程名称,如果它在每次调用中都不同,则意味着使用了不同的线程。