jvm - (Java内存模型) - 面试宝典

举报
皮牙子抓饭 发表于 2023/08/02 09:45:17 2023/08/02
【摘要】 JVM(Java Virtual Machine)是Java虚拟机的缩写,它是Java程序运行的基础。Java内存模型(Java Memory Model,简称JMM)定义了Java程序中多线程并发访问共享变量的规则。 下面是一个简单的示例代码,展示了Java内存模型的一些特性:javaCopy codepublic class JVMExample { private static ...


JVM(Java Virtual Machine)是Java虚拟机的缩写,它是Java程序运行的基础。Java内存模型(Java Memory Model,简称JMM)定义了Java程序中多线程并发访问共享变量的规则。 下面是一个简单的示例代码,展示了Java内存模型的一些特性:

javaCopy codepublic class JVMExample {
    private static boolean flag = false;
    public static void main(String[] args) throws InterruptedException {
        Thread thread1 = new Thread(() -> {
            while (!flag) {
                // 空循环
            }
            System.out.println("Thread 1 finished.");
        });
        Thread thread2 = new Thread(() -> {
            flag = true;
            System.out.println("Thread 2 finished.");
        });
        thread1.start();
        Thread.sleep(1000); // 等待1秒钟,确保线程1已经开始执行
        thread2.start();
        thread1.join();
        thread2.join();
        System.out.println("Main thread finished.");
    }
}

这段代码创建了两个线程,一个线程不断地检查​​flag​​的值是否为​​false​​,另一个线程将​​flag​​的值改为​​true​​。如果JVM的内存模型能够正确地工作,那么第一个线程应该能够在第二个线程修改​​flag​​的值后退出循环。 JVM的内存模型确保了线程之间的可见性和有序性。可见性是指一个线程对共享变量的修改对其他线程是可见的,有序性是指程序的执行顺序与代码的顺序一致。 需要注意的是,以上代码只是用来展示Java内存模型的特性,并不是一个合理的线程同步实现。在实际开发中,应该使用​​volatile​​关键字、​​synchronized​​关键字或者​​java.util.concurrent​​包中的锁机制来保证线程之间的同步和正确性。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。