スレッドvolatileの使用


テスト
クラスを定義し、スレッドを起動してこのクラスを走り、メインスレッドmainメソッドでは、1ミリ秒を実行した後、flagをfalseに設定し、flagがvolatileを追加しない場合、プログラムは1ミリ秒後に停止せず、mainスレッドが変更したflagが新しいスレッドにタイムリーに同期していないことを説明し、volatileを追加すると1ミリ秒後に停止します.
public class HelloVolatile {
     

    volatile boolean flag=true;
    //  volatitle,       1    ,        ,      flag     false,
    //   volatile  ,1    ,      
    public void m(){
     
        System.out.println("    ");
        while (flag){
     
        }
        System.out.println("    ");
    }
}
public class Demo01 {
     
    static HelloVolatile helloVolatile=new HelloVolatile();

    public static void main(String[] args) {
     

        Thread thread=new Thread(()->{
     
            helloVolatile.m();
        });

        thread.start();

        try {
     
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
     
            e.printStackTrace();
        }

        helloVolatile.flag=false;
    }
}

volatileの2つの大きな特性:
スレッドの可視性の保証:
命令の並べ替えを禁止: