私は、私は本番環境で奇妙な問題に直面してJBossキャッシュ。同時実行の問題
JBossCacheの「マラゲータ」3.2.0.GAを使用していますが、時々、正しく動作しないのJBossキャッシュに書き込みます。私は時々、単純なJavaアプリケーション
public static void testCache() {
Cache cache = new DefaultCacheFactory().createCache(false);
cache.create();
cache.start();
final Node node = cache.getRoot().addChild(Fqn.fromString("/child1"));
int threadsCount = 20;
final CyclicBarrier b = new CyclicBarrier(threadsCount);
for (int i = 0; i < threadsCount; i++) {
final long j = i;
new Thread(new Runnable() {
@Override
public void run() {
try {
b.await();
String name = RandomGenerator.getRandomName(4);
node.put(j, name);
String nameFromCache = (String) node.get(j);
if (!name.equals(nameFromCache)) {
System.out.println("error");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
}
で、この状況を再現してみました、このテスト出力「エラー」、私は失敗しstatic void main
から実行します。 1/3が "エラー" msgを返します。単にnullを返します。私はすべてのマシンでそれを再現することはできません。
ヒント?
アクセスする前にノードをロックする必要がありますか? – Fakrudeen