现在有个疑惑,
比如现在有段代码
if(a>100){
....
}
这段代码运行在多线程环境下, 就是现在有多个线程来调用
比如线程2拿到CPU执行权的时候这个a的值还是103呢,所以满足if条件,但是刚判断完满足条件,还没来得及执行里边的代码呢,这时候线程1抢走了CPU执行权,线程1把a的值改成90了,改完后,线程2又重新抢回了CPU执行权,我想问这个时候线程2还会再重新 if 判断一下a的值吗?
还是同样的问题,如果我把if改成while(),那么线程2回过头来还会判断一下括号里的条件吗?
还是同样的问题,我把a变量用了volatile修饰后,会重新判断吗
如果加上volatile后,不会重新判断。
那volatile不是保证立即可见性吗?加上volatile就是为了让线程1的修改对线程2立即可见,就是为了立即告诉线程2现在a已经是90了已经不满足条件了, 不能再运行了,咱们想要的结果是这个。
那如果加上后不会重新判断的话,那就相当于加上volatile对我来说运行结果还是错的,还是没有达到预期的效果,那volatile有什么用呢
carolcoral
相关分类