多线程 volatile
2021-01-16 01:11
标签:volatil 排序 variable 高速缓存 mem static 相关 https 内存 参考:https://mp.weixin.qq.com/s/DZkGRTan2qSzJoDAx7QJag 建议阅读:《深入理解Java虚拟机》相关章节 多线程下的 原子性 可见性 指令重排序 无法保证(单线程 可以保证) static int mainMemoryVariable=0; 线程1: mainMemoryVariable++; mainMemoryVariable--; 线程2: mainMemoryVariable++; mainMemoryVariable--; 1、可见性 jvm内存模型下 每个线程都有自己的工作内存(类比 计算机高速缓存); ①工作内存彼此不可见; ②线程操作共享内存(类比 计算机主内存)中变量的过程:get change set(这个set 不是即时的 所以 线程A改了共享内存某变量的值 对其他线程不是即时可见的) 2、原子性 mainMemoryVariable++; 编译成字节码 机器码 其实是多条指令 3、指令重排序(机器码 汇编代码) mainMemoryVariable++; 编译成字节码 机器码 其实是多条指令 多条指令在执行时 顺序不一定是编译后的顺序 volatile 怎么保证可见性、指令重排序(JDK 1.5中): 怎么保证 指令有序-->内存屏障 一个变量被volatile修饰后 在每个volatile变量写操作、读操作的前后 加入内存屏障指令 ; 多线程 volatile 标签:volatil 排序 variable 高速缓存 mem static 相关 https 内存 原文地址:https://www.cnblogs.com/light-train-union/p/12933532.html
下一篇:Java学习路线导航图