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

java volatile关键字

作者:角落里哭泣   发布日期:2025-07-03   浏览:99

public class VolatileExample {

    private volatile boolean flag = false;

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

    public boolean getFlag() {
        return flag;
    }

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

        Thread t1 = new Thread(() -> {
            System.out.println("Thread 1 is waiting for flag to be true.");
            while (!example.getFlag()) {
                // Busy-waiting until flag becomes true
            }
            System.out.println("Thread 1 notices flag is true.");
        });

        Thread t2 = new Thread(() -> {
            try {
                System.out.println("Thread 2 will set flag to true after 3 seconds.");
                Thread.sleep(3000);
                example.setFlag(true);
                System.out.println("Thread 2 has set flag to true.");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });

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

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

解释说明:

  1. volatile关键字

    • volatile关键字用于确保变量的修改对所有线程立即可见。它防止了编译器和处理器对内存访问进行优化,从而避免了线程之间的可见性问题。
  2. 代码逻辑

    • 在这个例子中,flag是一个用volatile修饰的布尔变量。
    • Thread t1会不断地检查flag是否为true,如果是,则打印一条消息并退出循环。
    • Thread t2会在启动后等待3秒钟,然后将flag设置为true
    • 由于flagvolatile的,因此当t2修改了flag的值时,t1能够立即看到这个变化,而不会因为缓存或其他原因导致延迟。
  3. 为什么需要volatile

    • 如果没有volatilet1可能会一直读取它自己缓存中的flag值,而看不到t2flag的修改,从而导致死循环。

上一篇:java 验证码识别

下一篇:python调用java

大家都在看

java连接数据库的代码

ubuntu 卸载java

java sort用法

java collections.sort

java file类的方法

java 判断

java时间数据类型

java 时间加一天

java demo

java 截取

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

Laravel 中文站