弹簧控制器中的竞争条件

时间:2016-11-25 10:08:52

标签: java spring-mvc

我有一个代码片段如下所示,这将确保允许某些用户操作的次数有限。

1. @Value("${x.y.z.maxRetriesAllowed}")
2.  int maxAllowedRetries; 
3.  int retryLimit = --maxAllowedRetries; 

当进入静态代码分析(强化)时,该工具报告第3行可能存在竞争条件。

有人请建议我们如何在没有会话对象帮助的情况下避免这种情况。

2 个答案:

答案 0 :(得分:0)

这个怎么样?

int retryLimit = this.getRetries();

private synchronized int getRetries()
{
    return --this.maxAllowedRetires;
}

答案 1 :(得分:0)

你依赖于在retryLimit之前由Spring初始化maxAllowedRetries,这当然不太可能。基本上,它现在可能是0。因为字段在Spring填充值之前初始化,并且retryLimit在创建对象时被初始化。