java中重排序是什么?

提问者:帅平 问题分类:面试刷题
java中重排序是什么?
1 个回答
西瓜女皇
西瓜女皇
处理器为了提高处理效率,除了增加高速缓存,还会对代码进行乱序处理,在计算后对计算结果进行重组,得到最终的结果。这一操作在并发场景下,会导致共享变量在未处理完成的情况下被其他线程获取并处理,得到错误的结果。
可以通过 volatile 禁止指令重排序,volatile 通过内存屏障实现禁止指令重排序。
volatile 在变量操作满足原子性条件时,可以替代 synchronized 等重量级锁来实现线程安全。例如 volatile 修饰的变量的操作不依赖于自身或其他共享变量,或者被修饰的变量通过其他方式满足了原子性,则可以用于替代 synchronized。其中原子类由于由 CAS 和 volatile 修饰,CAS 可以使得变量满足原子性,因此原子类就是线程安全的。
发布于:1个月前 (02-08) IP属地:四川省
我来回答