public class VolatileExample {
// 使用 volatile 关键字修饰变量
private volatile boolean flag = true;
public void run() {
// 线程1:修改 flag 的值
new Thread(() -> {
try {
Thread.sleep(2000); // 模拟一些耗时操作
} catch (InterruptedException e) {
e.printStackTrace();
}
flag = false;
System.out.println("Thread 1: Changed flag to " + flag);
}).start();
// 线程2:读取 flag 的值
new Thread(() -> {
while (flag) {
// 这里会不断循环,直到 flag 被线程1修改为 false
}
System.out.println("Thread 2: Flag is now " + flag);
}).start();
}
public static void main(String[] args) {
new VolatileExample().run();
}
}
volatile 关键字的作用:
volatile 关键字用于修饰变量,确保该变量的修改对所有线程立即可见。它防止了编译器或处理器对变量的访问进行重排序优化,从而保证了多线程环境下的内存可见性。代码示例说明:
flag 是一个用 volatile 修饰的布尔变量。flag 修改为 false。while 循环中不断检查 flag 的值,直到 flag 被线程1修改为 false,此时线程2退出循环并打印结果。volatile,线程2可能会由于缓存等原因一直读取到旧值,导致无法及时响应 flag 的变化。上一篇:java treemap
下一篇:java stopwatch
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站