小编Ser*_*aev的帖子

关于重新排序:尽管使用volatile,为什么此代码会抛出RuntimeException?

public class ReOrdering implements Runnable {
    int one, two, three, four, five, six;
    volatile int volaTile;

    @Override
    public void run() {
        one = 1;
        two = 2;
        three = 3;
        volaTile = 92;
        int x = four;
        int y = five;
        int z = six;
    }
}
Run Code Online (Sandbox Code Playgroud)

的任务one,two并且three可以重新排序,只要他们所有发生之前volatile写.同样,x,yz 作为陈述可能被重新排序volatile写个个之前发生.该volatile操作通常称为内存屏障.保证之前发生的事情确保volatile变量的读写指令 不能在内存屏障上重新排序.

在保证具有另一种效果之前发生:当线程写入volatile变量时,在写入volatile 变量之前由线程更改的所有其他变量(包括非易失性)也会刷新到主存储器.当线程读取 volatile变量时,它还会读取所有其他变量(包括非易失性),这些 …

java multithreading java-memory-model

5
推荐指数
1
解决办法
83
查看次数

标签 统计

java ×1

java-memory-model ×1

multithreading ×1