更新时间:2023-03-28 来源:黑马程序员 浏览量:
Java的内存模型定义了Java程序在运行时的内存结构以及多线程情况下,多个线程之间如何共享内存。Java的内存模型保证了线程安全性,避免了多线程访问共享内存时出现的数据竞争、死锁等问题。
Java内存模型将内存分为两个部分:线程工作内存和主内存。线程工作内存是线程独有的内存空间,用于存储线程运行时的局部变量等数据,而主内存是所有线程共享的内存空间,用于存储Java程序中定义的全局变量等数据。
Java内存模型定义了一组规则,确保多个线程之间对共享内存的访问是正确的。其中包括:
·可见性:当一个线程修改了共享变量的值后,其他线程可以立即看到该变量的修改。
·原子性:对共享变量的读写操作应该被视为一个原子操作,不可被中断。
·有序性:线程之间的操作可能会被编译器、处理器进行指令重排等优化,但是Java内存模型保证了操作执行的顺序不会影响程序的正确性。
我们用一个简单的代码示例,展示了Java内存模型的可见性特性:
public class Main { private static boolean flag = false; public static void main(String[] args) throws InterruptedException { new Thread(() -> { while (!flag) { // 线程1不断检查flag的值 // do nothing } System.out.println("Thread 1 finished"); }).start(); Thread.sleep(1000); flag = true; // 主线程修改flag的值 System.out.println("Main thread finished"); } }
在这个例子中,程序开启了两个线程,其中线程1不断检查flag变量的值,直到它被修改为true。在主线程中,程序在等待了一段时间后将flag变量的值修改为true。
由于Java内存模型的可见性特性,当主线程修改flag变量的值时,线程1应该能够立即看到flag的值已经被修改为true,于是线程1退出循环并打印出"Thread 1 finished",然后程序结束。
【AI设计】北京143期毕业仅36天,全员拿下高薪offer!黑马AI设计连续6期100%高薪就业
2025-09-19【跨境电商运营】深圳跨境电商运营毕业22个工作日,就业率91%+,最高薪资达13500元
2025-09-19【AI运维】郑州运维1期就业班,毕业14个工作日,班级93%同学已拿到Offer, 一线均薪资 1W+
2025-09-19【AI鸿蒙开发】上海校区AI鸿蒙开发4期5期,距离毕业21天,就业率91%,平均薪资14046元
2025-09-19【AI大模型开发-Python】毕业33个工作日,就业率已达到94.55%,班均薪资20763元
2025-09-19【AI智能应用开发-Java】毕业5个工作日就业率98.18%,最高薪资 17.5k*13薪,全班平均薪资9244元
2025-09-19