对多线程的一些迷惑,求解...

现在有个疑惑,
比如现在有段代码
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有什么用呢

qq_v路过幸福_0
浏览 727回答 1
1回答

carolcoral

多线程你可以这样来思考:一棵苹果树上有很多的苹果(线程),假设有5000个苹果(最大支持5000线程),一个人来一次只能拿走一个苹果(每次只能调用一个线程),同时又10个人来拿苹果(同时操作10个线程),10个人拿苹果的时间和方式等对苹果树相互之间没有影响(线程隔离,线程之间是并列关系,相互之间不影响——线程锁),突然主管要求他们10个人要同时拿苹果(同步线程)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java