happen-before 原则

来源:互联网 发布:漫威英雄排名 知乎 编辑:程序博客网 时间:2024/06/06 14:21

happen-before原则是什么?

happens-before 口诀:如果两个操作之间具有happens-before 关系,那么前一个操作的结果就会对后面一个操作可见。

常见的happens-before规则:

1.

程序顺序规则:一个线程中的每个操作,happens- before 于该线程中的任意后续操作。

(注解:如果只有一个线程的操作,那么前一个操作的结果肯定会对后续的操作可见。)

2.

监视器锁规则:对一个监视器锁的解锁,happens- before 于随后对这个监视器锁的加锁。

注解:这个最常见的就是syncronized 方法 和 syncronized块)

3.volatile变量规则:对一个volatile域的写,happens- before 于任意后续对这个volatile域的读。

int a =0; volatile int b = 0;线程1{ 操作1:a = 1;//插入一个StoreStore屏障 禁止上面的普通写与下面的volatile 写重排序 操作2:b =2;}线程2{ if (b==2)//LoadLoad屏障。 禁止上面的volatile 与下面的普通读重排序System.out.println(a);//a的值为多少呢?}

因为存在屏障,JVM就不会重排序上述代码。

4.传递性:如果A happens- before B,且B happens- before C,那么A happens- before C。

(注解:这个看起来就像单线程顺序执行。。。)

扩展JVM内存屏障插入策略:

在每个volatile写操作的前面插入一个StoreStore屏障。

在每个volatile写操作的后面插入一个StoreLoad屏障。

在每个volatile读操作的后面插入一个LoadLoad屏障。

在每个volatile读操作的后面插入一个LoadStore屏障。

上述内存屏障插入策略非常保守,但它可以保证在任意处理器平台,任意的程序中都能得到正确的volatile内存语义。

相信有了这些规则,只有理解他们,我们就能开发出更好的并发程序。

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 红腹角雉 家鸡野雉 面具翅膀雉刀 青雉的原名 呼卢喝雉 青雉断腿赤犬断手 雉读音 雉怎么读音 棕尾虹雉 关关雉鸠在河之洲全文 关关雉鸠 海贼之我为青雉 我真是学神木下雉水 大航海之我为青雉 山雨 山雨古诗 山雨欲来 山雨欲来风满楼 山雨欲来风满楼下一句 山雨欲来风满楼全诗 山雨欲来风满楼意思 山雨欲来风满楼什么意思 山雨欲来风满楼上一句 山雨欲来风满楼全文 山雨欲来风满楼打一合肥名胜 与君共话巴山雨 山雨欲来风满楼是什么意思 山雨欲来风满楼赏析 淘宝 山雨欲来风满楼 山雨欲来风满楼的意思是什么 山雨欲来风满楼对下联 山雨欲来风满楼的上一句 山雨欲来风满楼txt 山中访友山雨 神木青山 东山雨树 末世领主系统 山雨欲来 山顶洞人 山顶洞 山顶变头顶 重檐歇山顶 九山顶