返回

不同线程之间进行数据交互经历的步骤

发布时间: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的。


特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
Spring 数据转换器(二) 2022-11-30 05:22:59