您的位置:首页 > 其它

可见性.重排序

2017-05-10 00:00 113 查看
可见性:一个线程对共享变量值的修改,能够及时的被其他线程看到。

共享变量:如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量。

导致共线线程变量在线程间不可见的原因:

1.线程的交叉执行

2.重排序结合线程交叉执行

3.共享变量更新后的值没有在工作内存与主内存间及时更新

重排序:代码书写的顺序与实际执行的顺序是不同的,指令重排序是编译器或处理器为了提高程序性能而做的优化

1.编译器优化的重排序(编译器优化)

2.指令级并行重排序(处理器优化)

3.内存系统的重排序(处理器优化)

as-if-serial:无论如何重排序,程序执行的结果应该与代码顺序执行的结果一直(Java编译器、运行时和处理器都会保证Java在单线程下遵循as-if-serial语义)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  可见性 重排序