原子性、可见性、有序性是多线程编程中最重要的几个知识点,由于多线程情况复杂,如何让每个线程能看到正确的结果,这是非常重要的,下面和千锋广州小编一起来看看吧!

原子性

原子性是指一个线程的操作是不能被其他线程打断,同一时间只有一个线程对一个变量进行操作。在多线程情况下,每个线程的执行结果不受其他线程的干扰,比如说多个线程同时对同一个共享成员变量n++100次,如果n初始值为0,n最后的值应该是100,所以说它们是互不干扰的,这就是传说的中的原子性。但n++并不是原子性的操作,要使用AtomicInteger保证原子性。

可见性

可见性是指某个线程修改了某一个共享变量的值,而其他线程是否可以看见该共享变量修改后的值。在单线程中肯定不会有这种问题,单线程读到的肯定都是最新的值,而在多线程编程中就不一定了。

每个线程都有自己的工作内存,线程先把共享变量的值从主内存读到工作内存,形成一个副本,当计算完后再把副本的值刷回主内存,从读取到最后刷回主内存这是一个过程,当还没刷回主内存的时候这时候对其他线程是不可见的,所以其他线程从主内存读到的值是修改之前的旧值。

像CPU的缓存优化、硬件优化、指令重排及对JVM编译器的优化,都会出现可见性的问题。

有序性

我们都知道程序是按代码顺序执行的,对于单线程来说确实是如此,但在多线程情况下就不是如此了。为了优化程序执行和提高CPU的处理性能,JVM和操作系统都会对指令进行重排,也就说前面的代码并不一定都会在后面的代码前面执行,即后面的代码可能会插到前面的代码之前执行,只要不影响当前线程的执行结果。所以,指令重排只会保证当前线程执行结果一致,但指令重排后势必会影响多线程的执行结果。

虽然重排序优化了性能,但也是会遵守一些规则的,并不能随便乱排序,只是重排序会影响多线程执行的结果。

以上就是原子性、可见性、有序性的概念解释,希望对大家有帮助哦!

java原子性是什么_中级Java应该清楚的概念:原子性、可见性、有序性是什么?...相关推荐

  1. java xml 表达式语言_中级Java开发工程师笔试题

    JAVA笔试题 1) 描述Web Service的用途和调用方式的语言是(B). (选择一项) a) HTML b) WSDL c) JAVA d) XML 2) 在Web技术中,"无刷新& ...

  2. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  3. java中级程序员面试题_中级Java程序员常见面试题汇总

    下面是一些中级Java程序员常见面试题汇总,你可以用它来好好准备面试. 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器 ...

  4. JAVA redis缓存过期_失效java服务器

    Java 并发/多线程教程--4并发模型 本系列译自jakob jenkov的Java并发多线程教程(本章节部分内容参考http://ifeve.com/并发编程模型),个人觉得很有收获.由于个人水平 ...

  5. java是什么格式_是java格式

    错误:编码GBK的不可映射字符的解决办法 最近在重新补javaSE的基础,编辑器编写完代码以后,在控制台运行代码段的时候,出现了以下的错误提示:错误:编码GBK的不可映射字符 在通过查询谷哥和度娘以后 ...

  6. java学习视频网站_学习Java的视频网站

    原标题:学习Java的视频网站 很多自学Java的人都发现网上的Java视频教程都会分章节讲解,但是总感觉很乱?那是因为你没有比较系统.全面的了解Java语言,没有将Java应用到实际项目中,那么有哪 ...

  7. java ee开发环境_设置Java EE 6开发环境

    java ee开发环境 本教程简要说明了如何设置典型的环境来开发基于Java EE 6的应用程序. 除了可以正常工作的Windows XP客户端具有足够的CPU能力和内存外,本教程没有其他先决条件. ...

  8. 北京java研发平均工资_各地java开发工程师平均工资 北京高级java开发工程师工资2万多...

    原标题:各地java开发工程师平均工资 北京高级java开发工程师工资2万多 java开发工程师工资水平一直都是程序员们比较关注的话题,毕竟java是最热门的编程的语言.每个城市的由于经济水平的差距, ...

  9. java中变量 关键字_基于java的voliate关键字详解

    voliate关键字的作用: 一.内存可见性 基于缓存一致性协议,当用voliate关键字修饰的变量改动时,cpu会通知其他线程,缓存已被修改,需要更新缓存.这样每个线程都能获取到最新的变量值. 二. ...

最新文章

  1. 一对一交友源码,一对一视频交友源码,这些功能是主流
  2. php laravel组件,php – 在Laravel中为共享组件包中的文件配置
  3. js深入理解构造函数和原型对象
  4. java 编写 欢迎你_社团联合会——java编程协会欢迎你的加入
  5. vantUI组件:获取验证码 - 踩坑篇
  6. 输出dag的所有拓扑排序序列_算法学习笔记(53): 拓扑排序
  7. jmeter持续时间循环控制器_不写代码实现条件循环?只用Jmeter就能实现
  8. 10 行代码解决漏斗转换计算之性能优化
  9. jQuery distpicker省市区三级联动
  10. 京瓷打印机m5521cdn_京瓷m5521cdn驱动
  11. 参考文献标号字体_毕业论文参考文献格式字体
  12. 网站设计之常见简单实用的JavaScript特效总结(上篇)
  13. uniapp 动态背景图写法
  14. Python之abandon(一)
  15. 从头开始学Tableau-第十七章(客户细分)
  16. 听打测试打字速度软件,易捷听打练习测速助手
  17. 编程计算并输出1 - n之间的所有数的平方和立方。其中n值由用户从键盘输入
  18. 微信小程序 -- 数据库数据excel文件批量导入
  19. JNI_OnLoad 回调Java_Java本地接口(JNI)编程指南和规范(第八章)
  20. heatmap.js来绘制热力图

热门文章

  1. [Swift通天遁地]二、表格表单-(14)实时调整表单元素的激活和失效
  2. jQuery中animate的一个隐藏很深的坑
  3. 汇编指令:push、pop
  4. 三 jQuery 选择器
  5. ADO数据库常用操作
  6. ubuntu11.04中nautilus(文件管理器)查看FTP乱码的解决办法
  7. Python内置库修炼——turtle绘图库指令大全
  8. 初学者python笔记(filter()函数完全详解)
  9. 如何将spyder打包成exe_exe程序打包成安装文件,自己的程序制作成一键安装程序...
  10. Python处理文本文件案例一则