可见性.重排序
2017-05-10 00:00
113 查看
可见性:一个线程对共享变量值的修改,能够及时的被其他线程看到。
共享变量:如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量。
导致共线线程变量在线程间不可见的原因:
1.线程的交叉执行
2.重排序结合线程交叉执行
3.共享变量更新后的值没有在工作内存与主内存间及时更新
重排序:代码书写的顺序与实际执行的顺序是不同的,指令重排序是编译器或处理器为了提高程序性能而做的优化
1.编译器优化的重排序(编译器优化)
2.指令级并行重排序(处理器优化)
3.内存系统的重排序(处理器优化)
as-if-serial:无论如何重排序,程序执行的结果应该与代码顺序执行的结果一直(Java编译器、运行时和处理器都会保证Java在单线程下遵循as-if-serial语义)
共享变量:如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量。
导致共线线程变量在线程间不可见的原因:
1.线程的交叉执行
2.重排序结合线程交叉执行
3.共享变量更新后的值没有在工作内存与主内存间及时更新
重排序:代码书写的顺序与实际执行的顺序是不同的,指令重排序是编译器或处理器为了提高程序性能而做的优化
1.编译器优化的重排序(编译器优化)
2.指令级并行重排序(处理器优化)
3.内存系统的重排序(处理器优化)
as-if-serial:无论如何重排序,程序执行的结果应该与代码顺序执行的结果一直(Java编译器、运行时和处理器都会保证Java在单线程下遵循as-if-serial语义)
相关文章推荐
- 深入理解JVM(二)——内存模型、可见性、指令重排序
- 轻松学JVM(二)——内存模型、可见性、指令重排序
- 深入理解JVM(二)——内存模型、可见性、指令重排序
- Java并发编程实践笔记(四)——chapter3(重排序优化,可见性)
- JVM并发机制的探讨——内存模型、内存可见性和指令重排序
- JVM并发机制的探讨——内存模型、内存可见性和指令重排序 http://my.oschina.net/chihz/blog/58035
- volatile关键字作用与内存可见性、指令重排序概述[JAVA]
- JVM并发机制的探讨——内存模型、内存可见性和指令重排序
- 关于volatile的可见性和禁止指令重排序的疑惑
- JVM并发机制的探讨——内存模型、内存可见性和指令重排序
- JVM并发机制的探讨——内存模型、内存可见性和指令重排序
- 轻松学JVM(二)——内存模型、可见性、指令重排序
- 原子性、内存可见性和重排序——重新认识synchronized和volatile
- BZOJ 1007(水平可见直线-斜率排序+栈贪心)
- volotile关键字的内存可见性及重排序
- 多线程原子性、可见性、可排序
- JVM并发机制的探讨——内存模型、内存可见性和指令重排序
- 【BZOJ1007】【HNOI2008】水平可见直线(斜率排序+单调栈)
- 《java并发编程实战》读书笔记一 可见性和重排序现象
- JVM并发机制探讨―内存模型、内存可见性和指令重排序