我有一些麻烦。
例如,我有两个动作:First 和 Second。
我编写了简单的实用程序,它使用执行器服务将 100000 个异步请求发送到第一操作和第二操作。
在第一个动作中,我做:
HitCounter.increment();
ActionContext.getContext().getSession().put("counter", HitCounter.getAtomicCounter());
return Action.SUCCESS;
在第二个动作中,我做:
System.out.println("From session: "+ActionContext.getContext().getSession().get("counter"));
System.out.println("Actual:"+ HitCounter.getAtomicCounter());
return Action.SUCCESS;
我看到的输出(这真的让我很生气):
From session: 2
Actual: 69352
一段时间后,当我仅从我的浏览器使用此 Fitst 动作/第二个动作并且没有并发请求(由我的加载实用程序生成)时,结果“稳定”为实际值。因此,我有并发问题。
我应该使用一种标准方法来避免 Struts2 中的并发问题吗?
PS HitCounter 是线程安全的,因为它只包含一个字段并且是 AtomicInteger。
PPS HitCounter 实现:
public class HitCounter {
private static AtomicInteger counter = new AtomicInteger(0);
public static void increment() {
counter.incrementAndGet();
}
public static int getAtomicCounter() {
return counter.get();
}
}
PPPS 我删除了 Thread.yield(); 但这没有帮助。:(