Epi*_*aph 4 java multithreading jmx
我正在使用方法打开 JMX 连接getMBeanServerConnection(),然后在 finally 块中使用后将其关闭。而且,对于给定的 JMX 连接器,2 次成功调用getMBeanServerConnection()通常会返回相同的MBeanServerConnection.
一些操作是并发调用的,并且每个操作都调用getMBeanServerConnection(). 但是,他们得到相同的连接。因此,当第一个操作完成时,剩余的操作将失败并出现“连接已关闭”错误。
我该如何解决这个问题?我应该创建多个连接器对象并调用getMBeanServerConnection()它们来检索不同的连接吗?或者,我是否需要使这个方法同步(并降低效率)?
我认为简短的答案是您需要使用同步并承受性能损失。
鉴于 JMX 调用是基于 RMI/网络的,相比之下,synchronized块会非常便宜。您实现的具有使用计数器的任何解决方案都会受到竞争条件的影响 - 特别是考虑到 JMXConnector 很可能没有针对关闭/连接竞争条件的保护。例如,某人可能在其他人正在连接的同时关闭连接,并且新连接可能会关闭。
我认为你应该为连接器编写一个包装类(或方法)。它会:
connect()(仅当使用计数器为 0 时)、调用getMBeanServerConnection()并递增使用计数器并返回连接。祝你好运。
| 归档时间: |
|
| 查看次数: |
3765 次 |
| 最近记录: |