码迷,mamicode.com
首页 > 编程语言 > 详细

java并发编程的艺术(二)---重排序与volatile、final关键字

时间:2018-12-30 22:09:08      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:nal   ati   数据   for   编译   构造   处理   标记   允许   

重排序:是指编译器和处理器为了优化程序性能而对指令序列进行重新排序的一种手段。

当数据依赖的时候不允许产生重排序,多线程有些情况下重排序会影响语义。

volatile 定义的的对象内存对多线程之间是立马可见的,他建立了先写后读happens-before关系,常用来在多线程中进行flag标志位的判断,当A线程写入volatile变量时,会立马刷新值到主内存并且同时通知B线程修改消息,B线程中读取该对象值时会被jvm中的线程内存标记为无效再去读取一次。

final 的重排序:

  1. 在构造函数内对一个 final 域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。
  2. 初次读一个包含 final 域的对象的引用,与随后初次读这个 final 域,这两个操作之间不能重排序。

java并发编程的艺术(二)---重排序与volatile、final关键字

标签:nal   ati   数据   for   编译   构造   处理   标记   允许   

原文地址:https://www.cnblogs.com/wengshuhang/p/10200383.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!