我有一个代码片段如下所示,这将确保允许某些用户操作的次数有限。
1. @Value("${x.y.z.maxRetriesAllowed}")
2. int maxAllowedRetries;
3. int retryLimit = --maxAllowedRetries;
当进入静态代码分析(强化)时,该工具报告第3行可能存在竞争条件。
有人请建议我们如何在没有会话对象帮助的情况下避免这种情况。
答案 0 :(得分:0)
这个怎么样?
int retryLimit = this.getRetries();
private synchronized int getRetries()
{
return --this.maxAllowedRetires;
}
答案 1 :(得分:0)
你依赖于在retryLimit之前由Spring初始化maxAllowedRetries,这当然不太可能。基本上,它现在可能是0。因为字段在Spring填充值之前初始化,并且retryLimit在创建对象时被初始化。