目录
一、volatile关键字
1,volatile 能保证内存可见性
代码在写入 volatile 修饰的变量的时候
改变线程工作内存中volatile变量副本的值
将改变后的副本的值从工作内存刷新到主内存
代码在读取 volatile 修饰的变量的时候
从主内存中读取volatile变量的最新值到线程的工作内存中
从工作内存中读取volatile变量的副本
static class Counter{
public int flag = 0;
}
public static void main(String[] args) {
Counter counter = new Counter();
Thread t1 = new Thread(){
@Override
public void run() {
while (counter.flag == 0){
}
System.out.println("循环结束");
}
};
t1.start();
Thread t2 = new Thread(){
@Override
public void run() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个整数:");
counter.flag = scanner.nextInt();
}
};
t2.start();
}
预期的结果是:
线程1会先进入循环状态,线程2读取一个用户输入的整数。随着用户的输入一个非0的整数之后,线程1就会终止。
实际效果