# 线程间的可见性

package com.mrzhang.javalearn.bingfa.demo_04;

import java.util.concurrent.TimeUnit;

/**
 * volatile基本使用(一)
 *
 * @author 91MrZhang on 2020/8/1
 */
public class VolatileDemo01 {

    // 看看这个关键字的效果
    private /*volatile*/ boolean isRunning = true;

    public void changeStatus() {
        isRunning = !isRunning;
        System.out.println("isRunning---->" + isRunning);
    }

    public void doWork() {
        System.out.println("工作开始");
        while (isRunning) {
        }
        System.out.println("工作结束");
    }

    public static void main(String[] args) {
        VolatileDemo01 vd01 = new VolatileDemo01();
        new Thread(vd01::doWork, "工作线程").start();

        // 2s之后改变状态
        try {
            TimeUnit.SECONDS.sleep(2);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        new Thread(vd01::changeStatus, "控制线程").start();
    }
}