首页 / JAVA / Java中变量的读写原子性
Java中变量的读写原子性
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java中变量的读写原子性,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1467字,纯文字阅读大概需要3分钟。
内容图文
![Java中变量的读写原子性](/upload/InfoBanner/zyjiaocheng/685/7e5074deb62e4fbb8e452a1a97d36fb3.jpg)
这是另一个question of mine的跟进.
@templatetypedef回答了问题(赞赏),他在回答中写道:
As a note – atomicity does not mean “all other threads will be blocked
until the value is ready. It means all other threads will either see
the state purely before the operation is done or purely after the
operation is done, but nothing else.
我对此感到困惑,原因如下:
它说here:
Atomic actions cannot be interleaved, so they can be used without fear
of thread interference.
我从中推断出的是,这与他的著作相矛盾.
如果我们有2个int变量i1和i2,我们执行原子操作i1 = i2;并且此操作由threadX执行.
然后,如果无法按上述方式交错原子操作,则意味着在此原子操作(由threadX执行)期间,不允许其他线程Y访问(用于读取或写入)相同的变量i2,因此,其他线程Y不被访问.允许在原子操作期间访问相同的变量,因此确实存在某种形式的阻塞.
我说对了吗?
谢谢…
解决方法:
据我所知,没有原子i1 = i2运算.您可以自动读取一个int,也可以自动写入一个int,但是不能在同一操作中同时执行两个操作.所以i1 = i2是两个不同的原子操作,先读后写.您可以确保没有任何东西会干扰读取操作,因此您在读取i2时不会看到对i2的部分更新,并且可以保证没有任何东西会干扰对i1的写入,但是无法保证这两者之间不会发生任何事情.原子操作.
可以说线程t1将要做:
i2 = 10
i1 = i2
线程t2将要做:
i1 = 7
i2 = 18
System.out.println(i1)
您可以保证t1最终将为i1分配10或18,但是您不知道哪个.但是,可以保证它不能是任何其他值,因为对i2的读取和对i1的写入都是原子的,因此在修改i2时,最终看不到i2的某些位.同样,保证t2可打印10、18或7,而不能打印其他任何东西.但是,如果没有同步,就无法知道将要打印的那三个值中的哪一个.
内容总结
以上是互联网集市为您收集整理的Java中变量的读写原子性全部内容,希望文章能够帮你解决Java中变量的读写原子性所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。