我对volatile变量如何有效地从“主”内存访问有点困惑。它与具有本地副本的变量(非易失性)有什么不同?多线程访问非易失性vs是一个易失性变量时,典型的工作流程是什么?我的意思是他们如何在幕后工作?Java:易变变量访问
2
A
回答
5
比方说,你有一个可以被多个线程访问的变量。
线程1查看变量。由于查看共享内存比线程本地内存更昂贵,因此它会创建变量的副本。 (请注意,对象不会被复制,只是其参考。)
线程2查看相同的变量。它决定改变这个变量。但是线程1不知道它!线程1仍在使用陈旧的数据。这是一件非常糟糕的事情。通过将其设置为volatile
,每个线程在访问时都必须查看原始变量。他们不允许制作本地副本,所以不会过时。
相关问题
- 1. Java访问时间变量
- 2. Java访问实例变量
- 3. 访问变量
- 4. 访问变量
- 5. 访问变量
- 6. 变量访问
- 7. 访问变量
- 8. 访问变量
- 9. 访问变量
- 10. 常量/变量和不可变/易变
- 11. !不同!易变的变量?
- 12. 访问asp.net变量
- 13. 访问TempData变量
- 14. 访问变量环
- 15. 访问类变量?
- 16. 访问变量actionPerformed
- 17. 变量的访问
- 18. C访问变量#
- 19. 访问类变量
- 20. Reactjs - 访问变量
- 21. 变量的访问
- 22. 访问类变量
- 23. 访问Javascript变量
- 24. 访问NodeJS变量?
- 25. 访问JavaScript变量
- 26. 访问变量值
- 27. 在Java中访问shell环境变量
- 28. 在java中访问继承类变量
- 29. 局部变量访问内部类(java)
- 30. Java:变量访问说明符
可能重复的[Java中的易失性关键字 - 澄清](http://stackoverflow.com/questions/3603157/volatile-keyword-in-java-澄清) – Mat 2012-08-04 15:15:22
在读完该线程之后,我并没有那么清楚,所以我打开了这个问题。我实际上更多地询问工作流程和内存访问,而不是概念本身 – peter 2012-08-04 15:20:30
对不起,我认为值得一提的是'volatile'的优点之一是它还可以确保原语的原子读取。对于32位处理器机器中的64位变量(比如'long'或'double')是很有用的,因为它们会阻止在读取变量的前32位和后32位之间更新变量。 – Pshemo 2012-08-04 15:43:30