现在有个疑惑,比如现在有段代码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有什么用呢
1 回答
carolcoral
TA贡献41条经验 获得超9个赞
多线程你可以这样来思考:
一棵苹果树上有很多的苹果(线程),假设有5000个苹果(最大支持5000线程),一个人来一次只能拿走一个苹果(每次只能调用一个线程),同时又10个人来拿苹果(同时操作10个线程),10个人拿苹果的时间和方式等对苹果树相互之间没有影响(线程隔离,线程之间是并列关系,相互之间不影响——线程锁),突然主管要求他们10个人要同时拿苹果(同步线程)
添加回答
举报
0/150
提交
取消