【313、JMM(Java 内存模型)常见面试题】

119 阅读2分钟

Java 内存模型(Java Memory Model,JMM)定义了 Java 程序中多线程并发访问共享内存的规则,确保了多线程并发访问时的可见性、原子性和有序性。以下是一些 JMM 常见的面试题:

  1. 什么是 Java 内存模型?

Java 内存模型是一种规范,它定义了 Java 程序中多线程并发访问共享内存时的行为规则。

  1. 什么是可见性问题?

可见性问题指的是当一个线程修改了共享变量的值后,另一个线程无法立即看到这个修改的值。

  1. 什么是原子性问题?

原子性问题指的是一个操作在执行过程中,不能被其他线程干扰,要么全部执行成功,要么全部执行失败,不会存在中间状态。

  1. 什么是有序性问题?

有序性问题指的是代码执行的顺序可能与预期不一致,可能会出现指令重排的情况。

  1. synchronized 和 volatile 关键字分别解决了什么问题?

synchronized 关键字通过锁机制解决了原子性和可见性问题,保证了多个线程对共享变量的操作是有序的。

volatile 关键字通过禁止指令重排和保证内存可见性解决了可见性问题。

  1. 什么是 happens-before 原则?

happens-before 原则是 Java 内存模型中的一个重要概念,它指的是在多线程程序中,一个操作的结果对另一个操作是可见的,那么这两个操作之间就存在 happens-before 关系。

  1. 什么是线程安全?

线程安全指的是多个线程访问共享资源时,不会出现数据不一致、死锁和竞态条件等问题,保证了程序的正确性和可靠性。

  1. 什么是可重入锁?

可重入锁是一种特殊的锁,它允许线程在持有锁的情况下再次获取锁,避免了死锁和竞态条件等问题。

  1. 什么是 ABA 问题?

ABA 问题指的是在使用 CAS (比较并交换)操作时,由于共享变量的值经过了多次修改,导致最终的比较结果与预期不符。

  1. 什么是线程池?

线程池是一种线程管理机制,通过预先创建一定数量的线程,可以提高多线程程序的效率和稳定性,避免了线程频繁创建和销毁的开销。