2017-08-15 28 views
0

在ThreadLocal中春JMX设置的值工作不一致在ThreadLocal的春季JMX设置的值工作不一致

@ManagedResource(objectName = "MAN-TEST:name=SetValue", description = "Set Value for JMX") 
@Component 
public class ValueSetJMX { 
    private static ThreadLocal<String> jmxValue = new ThreadLocal<String>(); 

    @ManagedAttribute 
    public void setManValue(String valueJMX) { 
    jmxValue.set(valueJMX) 
    } 

    @ManagedAttribute 
    public String getManValue() { 
      return jmxValue.get(); 
    } 
} 

为setManValue设定值后,如果我调用getManValue()多次,结果将是有时为空。

有没有解决这个

回答

2

我想你的意思是设置/远程获取价值的更好的方法。

否;您无法使用ThreadLocal - 不能保证每个请求都会使用相同的RMI线程。

+0

getManValue()用于所有JMX操作(使用方面设置的全局值)如果两个用户操作这些bean并设置两个不同的值,那么这是一个问题,为此如何获得并发性。 –

+0

JMX操作是离散的;您不能在不添加用户代码的情况下在调用之间存储状态(并根据某些输入数据访问状态)。 'ThreadLocal'只是不会削减它。 –