JVM:关于volatile型变量
2016-04-01 21:28
225 查看
关于violatile型变量的可见性
问题:为什么violatile具有可见性,但是多线程下对violatile变量进行自增操作也会不安全Java内存模型如下
1.自增代码的字节码指令是非原子操作(字节码指令逻辑与操作过程相同,不贴出实际代码),操作过程:从主内存读-修改-重写入主内存,而可见性只有在主内存后才可见,一个线程的工作空间对于其他线程是不可见的
2.依照Java内存模型的可见性,可见性是指线程对其他线程对主内存变量的更改敏感,而不是对在工作内存内的修改敏感。每一次线程调用变量之前会刷新主内存。因此多线程下自增操作,即使是violatile,也是不安全的,但是并未违反可见性
reference:深入理解Java虚拟机 周志明 著
相关文章推荐
- Python3写爬虫(四)多线程实现数据爬取
- Java 6 JVM参数选项大全(中文版)
- IE7降低内存和降低CPU的几个技巧
- C#实现多线程的同步方法实例分析
- 如何高效的使用内存
- DOS下内存的配置
- 浅谈chuck-lua中的多线程
- XP/win2003下发现1G的内存比512M还慢的解决方法
- C#简单多线程同步和优先权用法实例
- PowerShell实现动态获取当前脚本运行时消耗的内存
- C#多线程学习之(四)使用线程池进行多线程的自动管理
- C#多线程编程中的锁系统(三)
- 解析C#多线程编程中异步多线程的实现及线程池的使用
- C#实现把dgv里的数据完整的复制到一张内存表的方法
- C#多线程学习之(六)互斥对象用法实例
- 基于一个应用程序多线程误用的分析详解
- SQL语句实现查询SQL Server内存使用状况
- C#多线程学习之(三)生产者和消费者用法分析
- C#多线程学习之(一)多线程的相关概念分析
- C#多线程之Thread中Thread.IsAlive属性用法分析