マルチスレッド アプリケーションでは、優れた 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)
スレッドが ( getListまたはgetIntまたは同様のメソッドによって) ブロックされるたびに、ロックは ConfigurationInterplator クラスにあります。そのソースを見ると、クラスのインスタンス化が同期されていることがわかりますが、プロパティを読み取ることができればよく、毎回補間する必要はありません。
この制限を乗り越えるために Apache Commons に組み込み方法はありますか? たとえば、毎回補間ステップを実行せず、何らかの方法でキャッシュしますか?
ありがとう、クリシー