【问题标题】:Apache Commons - ConfigurationInterpolator blocking threadsApache Commons - ConfigurationInterpolator 阻塞线程
【发布时间】:2013-10-25 13:42:28
【问题描述】:

在多线程应用程序中,我使用了出色的 Apache Commons 库。 但是,由于某种原因,我的一半线程在调用它的 getList 和类似方法时会被阻塞。

这是线程转储的示例:

   java.lang.Thread.State: BLOCKED (on object monitor)
at org.apache.commons.configuration.interpol.ConfigurationInterpolator. (ConfigurationInterpolator.java:138)
- locked <0x00000000855e6138> (a java.util.HashMap)
at org.apache.commons.configuration.AbstractConfiguration.createInterpolator(AbstractConfiguration.java:328)
at org.apache.commons.configuration.AbstractConfiguration.getSubstitutor(AbstractConfiguration.java:292)
- locked <0x00000000d7293058> (a org.apache.commons.configuration.SubsetConfiguration)
at org.apache.commons.configuration.PropertyConverter.interpolate(PropertyConverter.java:958)
at org.apache.commons.configuration.AbstractConfiguration.interpolate(AbstractConfiguration.java:446)
at org.apache.commons.configuration.SubsetConfiguration.interpolate(SubsetConfiguration.java:213)
at org.apache.commons.configuration.SubsetConfiguration.interpolate(SubsetConfiguration.java:218)
at org.apache.commons.configuration.AbstractConfiguration.interpolate(AbstractConfiguration.java:433)
at org.apache.commons.configuration.SubsetConfiguration.interpolate(SubsetConfiguration.java:224)
at org.apache.commons.configuration.AbstractConfiguration.getString(AbstractConfiguration.java:1039)
at org.apache.commons.configuration.AbstractConfiguration.getString(AbstractConfiguration.java:1018)

每次线程被阻塞(通过 getListgetInt 或类似方法)时,锁就在 ConfigurationInterplator 类中。 通过查看它的源代码,我了解到类的实例化是同步的 - 但是我只需要能够读取属性,并且不需要每次都进行插值。

Apache Commons 中是否有内置方法来克服此限制?例如不要每次都采取插值步骤并以某种方式缓存它?

谢谢, 克丽丝

【问题讨论】:

    标签: java multithreading apache-commons-config


    【解决方案1】:

    经过大量研究,这是我发现的:

    http://www.mail-archive.com/commons-user@jakarta.apache.org/msg11231.html

    我确认您不能禁用此插值

    以及解决方法

    通过继承 PropertiesConfiguration 并覆盖受保护的方法 interpolate(String) 以立即返回指定的字符串

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-04
      • 2016-01-27
      • 1970-01-01
      • 2018-02-16
      • 1970-01-01
      • 2015-12-29
      • 2010-10-07
      相关资源
      最近更新 更多