请问如下代码是线程安全的吗

帅狗 发布于 2017/01/02 11:19
阅读 457
收藏 0

哪里存在竞态条件了?

加载中
0
fist
fist
标黑的地方,set get操作
0
SKYOFKING
SKYOFKING
首先比较重要的是servlet是单例的,这是可能存在竞态的一个条件,所以加了final,保证对象不可变,另外这个产生竞态的原因是A:i.equals(lastNumber.get()) 如果i=5,lastNumber.get()=5;这里就可以通过,但是如果在这个时间段set变成了6,你的if里的操作就不是你想要的结果了,原子的操作只能保证你能取到最新的结果,而不是和锁一样。这也就是lastNumber.get()被缓存了。
返回顶部
顶部