我使用JBossCache的“马拉格塔” 3.2.0.GAJBoss缓存。并发问题
我在生产环境中面临着奇怪的问题,有时写到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
运行失败。 3次运行中的1次返回“错误”消息。它只是返回null。我无法在每台机器上重现它。
任何线索?
在访问它之前可能需要锁定节点吗? – Fakrudeen