Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

java关键字volatile

作者:翔龙天下   发布日期:2026-03-09   浏览:106

public class VolatileExample {

    private volatile boolean flag = false;

    public void setFlag(boolean flag) {
        this.flag = flag;
    }

    public boolean isFlag() {
        return flag;
    }

    public static void main(String[] args) throws InterruptedException {
        VolatileExample example = new VolatileExample();

        Thread t1 = new Thread(() -> {
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            example.setFlag(true);
            System.out.println("Flag has been set to true.");
        });

        Thread t2 = new Thread(() -> {
            while (!example.isFlag()) {
                // Busy-waiting until flag is set to true
            }
            System.out.println("Flag detected as true by t2.");
        });

        t2.start();
        t1.start();

        t1.join();
        t2.join();
    }
}

解释说明

  1. volatile 关键字的作用:

    • volatile 关键字用于修饰变量,确保该变量的值在多个线程之间保持一致。它防止了编译器和处理器对变量的读写操作进行重排序,并确保每次读取的是最新的值。
  2. 代码逻辑:

    • 在这个例子中,我们定义了一个 volatile 布尔类型的变量 flag
    • 线程 t1 会在启动后等待 2 秒,然后将 flag 设置为 true 并打印一条消息。
    • 线程 t2 会不停地检查 flag 的值,直到它变为 true。一旦 flag 变为 true,它会打印一条消息并退出循环。
  3. 为什么需要 volatile:

    • 如果没有 volatile,线程 t2 可能会一直读取到 flag 的旧值(即 false),即使 t1 已经将其设置为 true。使用 volatile 确保了 t2 总是读取到最新的值。

上一篇:java连接oracle数据库

下一篇:java string 转bigdecimal

大家都在看

java url decode

java判断是windows还是linux

java连接数据库的代码

java date类型比较大小

java djl

ubuntu 卸载java

es java api

java list 查找

java 解压rar

java读取excel中的图片

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站