关于java的volatile

记得早前本人写过一篇关于C关键字volatile一点认知文章

由于最近因业务需要一直在做与java相关的开发。故研究了一下java里的volatile这里与C里的大致相同(注:以下如未特殊说明所有volatile都指java里为主)。

java的内存交互用java的指令分为:lock、unlock、read、load、use、assign、store、write这8种。

其中lock、unlock是同步锁所产生的(如:synchronized、com.util.concurrent中的原子类)。

默认java会开启优化模式,也就是说后6种操作(read、load、use、assign、store、write)都可能是无序的。

好了,java内存加载大致就是这样。

volatile的作用就是【read、load、use】与【assign、store、write】这每组里面的操作都是有序的。也就是说不要让java优化。

网上也说了很多volatile为啥不是线程安全的,其实说白了上面的二元组中间可以插入其它操作,如:

public class VolatileTest {public static volatile int race = 0;public static void raceIncr() {race++;}
}

这里如果调用receIncr方法会大致执行以下操作:

read、load、use、iconst_1、iadd、assign、store、write

那么这里iconst_1、iadd对其它线程来说并不是可见的。。。

故总结,常用还是赋值吧。。

posted on 2017-09-19 17:05 tywei 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/tywei/p/7552783.html

关于java的volatile相关推荐

  1. java中volatile

    volatile用来修饰变量.Java 语言中的 volatile 变量可以被看作是一种 "程度较轻的 synchronized":与 synchronized 块相比,volat ...

  2. Java中 volatile 关键字的最全总结,快给自己查缺补漏吧!

    作者:老鼠只爱大米 来源:blog.csdn.net/u012723673/article/details/80682208 一.简介 volatile是Java提供的一种轻量级的同步机制.Java ...

  3. 认识Java中volatile关键字

    概念 1.可见性: 可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉.通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情.为了确保多个线程之间对内 ...

  4. java关键字 valotile_Java内存模型-jsr133规范介绍,java中volatile关键字的含义

    最近在看<深入理解Java虚拟机:JVM高级特性与最佳实践>讲到了线程相关的细节知识,里面讲述了关于java内存模型,也就是jsr 133定义的规范. 系统的看了jsr 133规范的前面几 ...

  5. Java基础——volatile关键字解析

    简介 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情.由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解一下与内 ...

  6. Java中 volatile 关键字的最全总结,赶快给自己查缺补漏吧!

    作者:老鼠只爱大米 blog.csdn.net/u012723673/article/details/80682208 一.简介 volatile是Java提供的一种轻量级的同步机制.Java 语言包 ...

  7. java中volatile关键字的含义_Java里volatile关键字是什么意思

    在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉. Java语言是支持多线程的,为了解决线程并发的问题,在语 ...

  8. 【003】【深入解析Java中volatile关键字的作用】

    为什么80%的码农都做不了架构师?>>> Java语言支持多线程,为了解决线程并发的问题,在语言内部引入了同步块synchronized和volatile关键字机制.在java线程并 ...

  9. 关于JAVA 中volatile使用的一些笔记

    写在前面 我的需求: CSDN看到一个小伙伴问了这样JAVA并发的问题,然后我做了解答,主要使用了volatile (1)某电影放映厅一共有10排,每排10个座位,座位号为"排号+列号&qu ...

最新文章

  1. 比 ELK 更简洁、高效!企业级日志平台后起之秀 Graylog!
  2. Python爬虫小实践:爬取任意CSDN博客所有文章的文字内容(或可改写为保存其他的元素),间接增加博客访问量...
  3. Spring Boot——MyBatis配置带下划线命名的字段自动转换驼峰命名解决方案
  4. SAP Commerce Cloud 产品主数据读取的单步调试
  5. ldap radius mysql_radius vs ldap
  6. 怎么下载并安装python_怎么下载官网python并安装
  7. CSS——基础选择器
  8. 烧写linux内核的步骤,启动redboot后,向目标机烧写一个linux内核的全过程
  9. ANDROID STUDIO系列教程二--基本设置与运行
  10. 如何将同一云服务下的虚拟机从经典部署模型迁移到 Azure Resource Manager
  11. 最实用也最容易被遗忘的 Linux 命令行使用技巧
  12. php array函数 array_filter 过滤数组中的空值
  13. Python深度学习入门学习路线(简单速成不掉头发)
  14. Python 多种音乐格式批量转换实战教程
  15. 程序员必备的网站推荐
  16. 计算机电脑基础程序,电脑程序入门知识
  17. 基于 smart-config技术实现
  18. fn键台式计算机在哪,电脑键盘上FN键的使用方法【图文】
  19. 实例分割:R-CNN、Fast R-CNN、Faster R-CNN、Mask R-CNN
  20. 嗅觉AI:为减少食物浪费出点力

热门文章

  1. 程序设计竞赛(数组+多组测试)
  2. 同一进程中同一端口如何区分不同的Socket
  3. 硬盘和显卡的访问与控制(三)(含多彩的Hello)——《x86汇编语言:从实模式到保护模式》读书笔记03
  4. 日常生活小技巧 -- Notepad++一次删除带指定关键字的行
  5. lower_bound upper_bound
  6. 《Java编程思想》10.6 匿名内部类奇怪的代码
  7. 关于《Java编程思想》的简单纠正
  8. 智能合约如何可信的与外部世界交互
  9. 通俗易懂理解PBFT拜占庭容错的回答
  10. Android 7.0 SystemUI 之启动和状态栏和导航栏简介