1. 介绍 Java 的内存模型 (JMM)
JMM(Java Memory Model)是规范多线程环境下线程如何正确访问变量的规则,主要涉及可见性、原子性、有序性。
**可见性:**若线程 A 从主内存读取变量到工作内存修改后未及时写回,线程 B 可能看不到更新。此时需使用 volatile 关键字约束,确保流程结束后其他线程才能访问。
**原子性:**若线程 A、B 同时执行 i++(读 - 改 - 写),可能导致结果错误。需使用 synchronized 或 Lock 锁实现互斥访问,确保操作不被打断。
**有序性:**编译器或 CPU 可能重排序指令。例如先赋值引用再初始化对象,可能导致线程 B 访问未完全初始化的对象。synchronized 或 Lock 构建锁屏障防止重排序。
JMM 核心思路:定义主内存(共享变量)和工作内存,变量需从主内存加载至工作内存修改后再写回主内存。通过 synchronized、volatile 及锁机制控制加载、写回时机及重排序,保证多线程共享变量的交互正确。
2. Java 多线程是什么?需要注意什么
Java 多线程指在同一程序中运行多个线程,共享变量、方法区等资源,以提高效率。
- **线程通信:**避免一个线程未准备好另一个线程就访问其变量,可使用
wait()或notify()控制访问时机。 - **数据安全:**防止并发修改导致数据不一致(如两个线程加 1 结果只加 1),利用
synchronized、volatile控制执行时机。 - **创建与销毁:**频繁创建销毁浪费资源,建议使用线程池提前准备线程。
3. Java 线程和操作系统的线程一样吗
Java 线程底层基于操作系统线程(如 Linux 下为 pthread),通常采用一对一模式。
需注意的要点仍为:可见性、原子性、有序性。
4. 保证数据一致性的方法有哪些
- **事务管理:**保证一组数据库操作要么全部成功,要么全部回滚。通过 ACID(原子性、隔离性、持久性、一致性)属性保障数据一致性。
- **锁机制:**保证对共享资源的互斥访问。在 Java 中利用
synchronized及其他锁机制控制并发访问。 - **版本控制:**通过乐观锁机制实现冲突检测。基于最新版本号修改生效,否则拒绝覆盖并重试,避免旧版本覆盖新版本。


