不同线程之间进行数据交互经历的步骤
发布时间:2022-11-30 05:34:11 296
相关标签: # 数据
Lock:把主内存中的变量标识为一条线程独占状态;
Read: 把主内存中的变量读取到工作内存中;
Load: 把变量放入变量副本中;
Use: 把变量副本传递给线程使用;
Assign: 把线程正在使用的变量传递到工作内存中的变量副本中;
Store:把工作内存中的变量副本传递到工作内存中的变量副本中;
Write: 将变量副本作为一个变量放入主内存中;
UnLock: 解除线程的独占状态;
JVM还要求以上8个步骤的操作都是原子性,但是对于64位的数据类型却有着非原子性协议,JVM允许64位的long和double类型在执行Load、Store、Read和Write操作时,分成两次32位的原子性操作。这就意味着,多个线程共享一个long和double类型时,某一个线程理论上可读到半个long和double值。如果真的遇到这种错误情况,读者可以使用volatile关键字类避免JVM这种误操作。但从实际情况来看,目前主流JVM都已经允许将64位的数据类型直接设置为原子性操作,一般情况下是不需要手动添加volatile的。
文章来源: https://blog.51cto.com/u_11315052/5883060
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报