黑马程序员技术交流社区

标题: 【广州校区】+【原创】volatile原理 [打印本页]

作者: 余大麻    时间: 2019-11-14 13:09
标题: 【广州校区】+【原创】volatile原理
多线程原理分析A. 初步认识 Volatile
[Java] 纯文本查看 复制代码
public class ThreadDemo {
    private static boolean stop = false;

    public static void main(String[] args) throws InterruptedException {
        new Thread(() -> {
            int i = 0;
            while (!stop) i++;
            System.out.println("i = " + i);
        }).start();
        TimeUnit.SECONDS.sleep(2);
        stop = true;
    }
}

[Java] 纯文本查看 复制代码
public class ThreadDemo2 {
    private volatile static boolean stop = false;

    public static void main(String[] args) throws InterruptedException {
        new Thread(() -> {
            int i = 0;
            while (!stop) i++;
            System.out.println("i = " + i);
        }).start();
        TimeUnit.SECONDS.sleep(2);
        stop = true;
    }
}

B. 什么是可见性C. CPU 的高速缓存
[Java] 纯文本查看 复制代码
value = 3;
"CPU0执行操作"
void cpu0() {
    value = 10;
    isFinish = true;
}

"CPU1执行操作"
void cpu1() {
    if(isFinish) { // true
        assert value == 10;// false
    }
}

[Java] 纯文本查看 复制代码
value = 3;
"CPU0执行操作"
void cpu0() {
    value = 10;
    "屏障指令,强制把缓存的变量同步到主内存里面"
    storeMemoryBarrier();
    isFinish = true;
}

"CPU1执行操作"
void cpu1() {
    if(isFinish) { // true
        "强制从主内存获取最新的值"
        loadMemoryBarrier();
        assert value == 10; // true
    }
}

D. JMM(Java Memory Model)E. Happens-Before 规则(只是一个概念)F. vloatile 不解决原子性问题










欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2