volitate的作用
时间:2020-05-09
本文章向大家介绍volitate的作用,主要包括volitate的作用使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
首先了解cpu和内存怎么配合的
volitate 的作用
- 线程间可见
Boolean running=true; void m(){ System.out.println("m start"); while (running){ System.out.println("m still running"); } System.out.println("m stop"); } public String test(){ new Thread(this::m,"t1").start(); try{ TimeUnit.SECONDS.sleep(1); }catch (Exception ex){ }
running=false
}
我要调用m方法的时候,一直在while 循环,如果我要跳出循环 只要把runing 修改成false 方法就停了,但是上面代码while 循环没有中断,主要原因 running 这个字段存在我们的主内存中,每个线程都是在cpu 里面的,cpu 读内存的时候,会把数据自己的线程缓存里面,在没有特定同步的情况下,一直会读线程缓存里面的数据添加volatile 修饰符,修改这个修饰符后,running 字段修改, 马上通知其他线程,需要从新重内存里面读取
- 禁止指令重排
- cpu的乱序执行:cpu在进行读等待的同时执行指令,是cpu 乱码的根源不是乱,而是提高效率
假设cpu 要执行两条指令 A,B 两条指令,之间无任何关系,执行A指令的时候,会把B指令先执行
static int x = 0, y = 0, a = 0, b = 0; public String HelloWord() throws Exception { int j = 0; for (; ; ) { j++; x = 0; y = 0; a = 0; b = 0; Thread one = new Thread(new Runnable() { @Override public void run() { a = 1; x = b; } }); Thread other = new Thread(new Runnable() { @Override public void run() { b = 1; y = a; } }); one.start(); other.start(); one.join(); other.join(); String reult = "第" + j + "次(" + x + "," + y + ")"; if (x == 0 && y == 0) { System.err.println(reult); break; } } return null; }
如果没有重排序情况下,x=0,y=0 这种情况不会出现,但是实际运行中 执行到39w次的时候出现x=0,y=0
原文地址:https://www.cnblogs.com/swp-code/p/12857557.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 你的 Redis 为什么变慢了?
- 解决Maven依赖冲突的好帮手,这款IDEA插件了解一下?
- Python爬虫实现HTTP网络请求多种实现方式
- 在tensorflow以及keras安装目录查询操作(windows下)
- Python调用OpenCV实现图像平滑代码实例
- php微信公众号开发之音乐信息
- Laravel关联模型中过滤结果为空的结果集(has和with区别)
- php微信公众号开发之二级菜单
- django中的ajax组件教程详解
- php微信公众号开发之校园图书馆
- 查看keras的默认backend实现方式
- Python包和模块的分发详细介绍
- PHP cookie,session的使用与用户自动登录功能实现方法分析
- Python内置方法和属性应用:反射和单例(推荐)
- 使用OpenCV对车道进行实时检测的实现示例代码