推广 热搜: csgo  vue  2023  angelababy  gps  信用卡  新车  htc  落地  控制 

万万没想到 Java 中最重要的关键字竟然是这个!

   2023-08-19 网络整理佚名2680
核心提示:方法没有添加同步锁,如果线程一调用set方法,那么正在调用的get方法的线程二,可能会看到前值,也可能会看到后值。关键字以后,所有副线程的关键字的内存,会强制刷新到主线程中,实现每个线程中的变量关键字都能实时的获取到最新值。java变量的读写主要分为以下几个关键字进行变量的读写。关键字是一种非锁机制,这种机制可以避免锁引起的上下文的切换

作者|小明菜市场

来源 | 小明菜市场(ID:)

头图|CSDN东方IC下载

关键字主要用于指令排序,常用于保证内存可见性和防止指令重排序。

保证内存可见性

内存可见性意味着所有线程都可以看到共享内存的最新状态。 例如,在多线程环境中,添加关键字后,每个线程的内存都会被强制刷新到主内存中,这样每个线程都可以保证自己的关键字内存是最新的。

从一个例子开始

给出一个无效的代码

public class MutableInteger {    private int value;    public int get(){        return value;    }    public void set(int value){        this.value = value;    }}

这段代码在多线程环境下运行正常,但在非多线程环境下运行不正常,因为get和set方法没有添加同步锁。 如果线程调用set方法,那么调用get方法的线程两个方法可能会看到前一个值或后一个值。

解决办法很简单,直接添加关键词即可。

private volatile int value;

上面的代码中,添加关键字后,所有辅助线程的关键字内存都会被强制刷新到主线程中,这样每个线程中的变量关键字就能实时获取到最新值。 相当于锁定了get和set方法。

关于关键词

java变量的读写主要分为以下几个关键字来读写变量。 lock 将线程标记为独占。释放从主内存读取到工作内存的独占状态 load 加载到工作内存中 use 将工作内存的值传递给执行引擎 返回工作内存的值 store 返回的值工作内存向主内存写操作返回值到主内存

通过read load use这三个关键字的连续出现,以及,、store、write这三个关键字的连续出现,保证了原子性。其控制如下图所示

注意:该关键字是非锁机制,可以避免锁引起的上下文切换

禁用指令重新排序

1.什么是指令重排序

被关键字修饰的变量前面将会有一条锁汇编指令,该指令用于强制阻止指令被排序。

2. 如何禁止

通过内存屏障来实现,内存屏障分为写屏障、读屏障和读写屏障。

portant; overflow-wrap: break-word !important;" data-darkmode-bgcolor-15870356071023="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15870356071023="rgb(255, 255, 255)" data-darkmode-color-15870356071023="rgb(157, 157, 157)" data-darkmode-original-color-15870356071023="rgb(73, 73, 73)" data-darkmode-bgcolor-15882384789136="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15882384789136="rgb(255, 255, 255)" data-darkmode-color-15882384789136="rgb(157, 157, 157)" data-darkmode-original-color-15882384789136="rgb(73, 73, 73)" data-darkmode-bgcolor-15882396318564="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15882396318564="rgb(255, 255, 255)" data-darkmode-color-15882396318564="rgb(157, 157, 157)" data-darkmode-original-color-15882396318564="rgb(73, 73, 73)" data-darkmode-bgcolor-15910964149051="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15910964149051="rgb(255, 255, 255)" data-darkmode-color-15910964149051="rgb(157, 157, 157)" data-darkmode-original-color-15910964149051="rgb(73, 73, 73)" class="js_darkmode__22" data-darkmode-bgcolor-15924629205581="rgb(25, 25, 25)" data-darkmode-original-bgcolor-15924629205581="rgb(255, 255, 255)" data-darkmode-color-15924629205581="rgb(157, 157, 157)" data-darkmode-original-color-15924629205581="rgb(73, 73, 73)" style="margin-top: 15px;margin-bottom: 15px;color: rgb(73, 73, 73);white-space: normal;font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;font-size: 11pt;line-height: normal;">更多精彩推荐

inktype="2" style="color: rgb(0, 128, 255);-webkit-tap-highlight-color: rgba(0, 0, 0, 0);cursor: pointer;line-height: normal;font-size: 14px;">☞inktype="2">Javascript 稳居第一、C# 连续下跌,调查 17000 名程序员后有了这些新发现!

inktype="2" style="color: rgb(0, 128, 255);-webkit-tap-highlight-color: rgba(0, 0, 0, 0);cursor: pointer;line-height: normal;font-size: 14px;">☞inktype="2">龙飞船再次发射成功!马斯克无缘现场,因疑似感染新冠……

inktype="2" style="color: rgb(0, 128, 255);-webkit-tap-highlight-color: rgba(0, 0, 0, 0);cursor: pointer;line-height: normal;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: normal;font-size: 14px;">☞inktype="2" style="color: rgb(0, 128, 255);-webkit-tap-highlight-color: rgba(0, 0, 0, 0);cursor: pointer;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: normal;font-size: 14px;">如何破解“中国开源拿来主义”?包云岗的几点分析

inktype="2" style="color: rgb(0, 128, 255);-webkit-tap-highlight-color: rgba(0, 0, 0, 0);cursor: pointer;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: normal;font-size: 14px;">2020年,区块链和加密领域的女性数量激增

点分享
点点赞
点在看

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON