Java Apache Commons-配置Interpolator阻止线程

Java Apache Commons-配置Interpolator阻止线程,java,multithreading,apache-commons-config,Java,Multithreading,Apache Commons Config,在多线程应用程序中,我使用伟大的Apache Commons库。 然而,由于某些原因,我的一半线程在调用其getList和类似方法时被阻塞 这是threadump的一个示例: java.lang.Thread.State: BLOCKED (on object monitor) at org.apache.commons.configuration.interpol.ConfigurationInterpolator. (ConfigurationInterpolator.java:138

在多线程应用程序中,我使用伟大的Apache Commons库。 然而,由于某些原因,我的一半线程在调用其getList和类似方法时被阻塞

这是threadump的一个示例:

   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)
java.lang.Thread.State:已阻止(在对象监视器上)
位于org.apache.commons.configuration.interpol.ConfigurationInterpolator。(ConfigurationInterpolator.java:138)
-锁定(java.util.HashMap)
位于org.apache.commons.configuration.AbstractConfiguration.createInterpolator(AbstractConfiguration.java:328)
位于org.apache.commons.configuration.AbstractConfiguration.getSubstitutor(AbstractConfiguration.java:292)
-锁定(org.apache.commons.configuration.SubsetConfiguration)
位于org.apache.commons.configuration.PropertyConverter.interpolate(PropertyConverter.java:958)
位于org.apache.commons.configuration.AbstractConfiguration.interpolate(AbstractConfiguration.java:446)
位于org.apache.commons.configuration.SubsetConfiguration.interpolate(SubsetConfiguration.java:213)
位于org.apache.commons.configuration.SubsetConfiguration.interpolate(SubsetConfiguration.java:218)
位于org.apache.commons.configuration.AbstractConfiguration.interpolate(AbstractConfiguration.java:433)
位于org.apache.commons.configuration.SubsetConfiguration.interpolate(SubsetConfiguration.java:224)
位于org.apache.commons.configuration.AbstractConfiguration.getString(AbstractConfiguration.java:1039)
位于org.apache.commons.configuration.AbstractConfiguration.getString(AbstractConfiguration.java:1018)
每次线程被阻塞时(通过getList、getInt或类似方法),锁就在ConfigurationInterplator类中。 通过查看其源代码,我了解到类的实例化是同步的——但是我只需要能够读取属性,而不需要每次都进行插值

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

谢谢,
krisy经过大量研究,我发现:

我确认您无法禁用此插值

以及解决办法

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