当前位置: 首页 > news >正文

东莞手机端建站模板长沙做网站的包吃包住4000

东莞手机端建站模板,长沙做网站的包吃包住4000,购物网站的开发,推广普通话的作文保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的,volatile关键字会强制将修改的值立即写入主存。 1.volatile的可见性 一个典型的例子:永不停止的循环。 public class Forever…

        保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的,volatile关键字会强制将修改的值立即写入主存。

1.volatile的可见性

一个典型的例子:永不停止的循环。

    public class ForeverLoop {static boolean stop = false;public static void main(String[] args) {new Thread(() -> {try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}stop = true;System.out.println("modify stop to true...");}).start();foo();}static void foo() {int i = 0;while (!stop) {i++;}System.out.println("stopped... c:" + i);}}

当执行上述代码的时候,发现foo()方法中的循环是结束不了的,也就说读取不到共享变量的值结束循环。

主要是因为在JVM虚拟机中有一个JIT(即时编辑器)给代码做了优化。

上述代码:

while (!stop) {
i++;
}

在很短的时间内,这个代码执行的次数太多了,当达到了一个阈值,JIT就会 优化此代码,如下:

while (true) {
i++;
}

当把代码优化成这样子以后,及时 stop 变量改变为了 false 也依然停止不了循环。

解决方案

在修饰 stop 变量的时候加上 volatile ,表示当前代码禁用了即时编辑器,问题就可以解决,代码如下:

static volatile boolean stop = false;

2.指令重排序问题

出现该问题的原因

简单说就是JVM为了对代码进行优化提高性能会在不影响结果的情况下把代码执行顺序改变,但多线程就可能会出现结果不对的问题。

解决方案:添加volatile关键字

volatile原理就是加了一些屏障,使屏障后的代码一定不会比屏障前的代码先执行,从而实现有序性。

给变量y添加关键字的屏障添加的示意图:

写操作加的屏障是阻止上方其它写操作越过屏障排到volatile变量写之下(阻止了 x = 1 走到 y = 1 之后)

读操作加的屏障是阻止下方其它读操作越过屏障排到volatile变量读之上(同上,x 的读,走到 y 的读之前)

补充:为什么不能给x变量添加关键字?

给变量x添加关键字的屏障添加的示意图

这样显然是不行的,主要是因为下面两个原则:

        1.写操作加的屏障是阻止上方其它写操作越过屏障排到volatile变量写之下(这个屏障只能阻止 x = 1;y = 1;这两行代码上方的指令越过该屏障,它不能阻止 y = 1;往上走到 x = 1;之前!)

        2.读操作加的屏障是阻止下方其它读操作越过屏障排到volatile变量读之上

所以,现在我们就可以总结一个volatile使用的小妙招:

        写变量让volatile修饰的变量的在代码最后位置

        读变量让volatile修饰的变量的在代码最开始位置

http://www.yayakq.cn/news/670540/

相关文章:

  • 网站的排版包括什么琴行网站开发学术论文
  • 咸阳专业网站建设网站开发公司怎么能接到单子
  • 自己做的网站别人查看今天的新闻发布会
  • 新浪微博 ssc网站建设wordpress熊掌号推送
  • 甘肃做高端网站阿里云购买域名后怎么建网站
  • 怎样建网站邢台外贸类网站
  • 网站上传附件目录格式怎样做公司网站建设
  • 房产中介做网站wordpress 浏览人数
  • 邯郸市网络建站网站建设功能模块
  • 农业特色网站建设wordpress首页登陆
  • 公司网站后如何更新唱片公司网站模板
  • 增城网站怎么做seo最吉祥的公司名字大全
  • 静态网站怎么维护搭建企业网站
  • 专做校园购物网站网站建设的入门书籍
  • 压缩图片在线网站免费wordpress编辑器百度云
  • 网站建设淄博做旅游网站都需要的调查
  • 自己做的网站怎么设置文件下载免费网站后台管理系统
  • 一个公司如何做多个网站备案深圳网站建设哪个公司好
  • 企业宣传网站方案微信被不明android账号登录
  • 专业教学资源库网站建设工作你建立的网站使用了那些营销方法
  • 湖南对外建设集团网站免费注册发布信息网站
  • ASP网站建设实训报告总结定制开发erp系统
  • 制作网页网站的软件重庆住房和城乡建设厅网站
  • 网站建设汇报 安全保障做一个平面网站的成本
  • 欣宝儿在什么网站做直播wordpress数据库配置文件路径
  • 别人盗用我的网站备案号怎么办网站编辑的工作内容
  • 网站制作工作室专业公司一家专门做灯的网站
  • 中国公司网站建设方案多页网站模板
  • 建立网站需要多少钱多少钱28湖南岚鸿给网站加个地图的代码
  • 提取网站子页面邮箱公司的网站是什么