mic*_*nko 5 java multithreading findbugs sonarqube
我在以下方法中对 return 语句进行了此违规:
protected Token getAccessToken() {
synchronized (this) {
if (token == null || isExpired(token))
token = createToken();
}
return token; // <-- Inconsistent synchronization of blablabla.token; locked 75% of time
}
Run Code Online (Sandbox Code Playgroud)
是否存在与token字段相关的可见性问题?据我了解,synchronized块令牌应该具有其最新值。
我错过了什么还是误报?
考虑以下:
如果你想做你正在做的事情,那么token可能需要是易失性的(但这可能不是一个足够的保证!),或者你应该始终从同步块返回值,或者将值分配token给内部的局部变量同步块并从外部返回该局部变量。
这甚至没有考虑其他方法同时可能对令牌执行的操作。如果另一个(同步或非同步)方法token也修改了(例如 allocates null),那么您的情况可能会更糟,因为您假设thattoken不为 null (正如您刚刚检查的那样),而实际上它可能是null now。
| 归档时间: |
|
| 查看次数: |
986 次 |
| 最近记录: |