スレッドvolatileの使用
テスト
クラスを定義し、スレッドを起動してこのクラスを走り、メインスレッドmainメソッドでは、1ミリ秒を実行した後、flagをfalseに設定し、flagがvolatileを追加しない場合、プログラムは1ミリ秒後に停止せず、mainスレッドが変更したflagが新しいスレッドにタイムリーに同期していないことを説明し、volatileを追加すると1ミリ秒後に停止します.
volatileの2つの大きな特性:
スレッドの可視性の保証:
命令の並べ替えを禁止:
クラスを定義し、スレッドを起動してこのクラスを走り、メインスレッド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つの大きな特性:
スレッドの可視性の保証:
命令の並べ替えを禁止: