后端经典面试题合集, synchronized 关键字是什么,有什么作用?
后端经典面试题合集, synchronized 关键字是什么,有什么作用?
QA
Step 1
Q:: 什么是 synchronized 关键字?
A:: synchronized 是 Java 中的一个关键字,用于在多线程环境下控制对共享资源的访问。它通过锁定对象或方法,确保在同一时间只有一个线程可以访问被 synchronized 修饰的代码块或方法,从而防止数据的不一致性和竞争条件。
Step 2
Q:: synchronized 的作用是什么?
A:: synchronized 的主要作用是保证线程安全。它通过强制线程排队访问共享资源,防止多个线程同时执行临界区代码,从而避免数据竞态条件。它可以用来保护共享变量的读取和写入,确保在多线程环境下数据的一致性和正确性。
Step 3
Q:: synchronized 可以修饰哪些内容?
A:: synchronized 可以修饰方法和代码块。修饰方法时,它会锁定当前对象的实例锁(非静态方法)或类锁(静态方法),确保同一时刻只有一个线程可以执行该方法。修饰代码块时,可以指定锁定某个对象,只有获取到该对象锁的线程才能执行该代码块。
Step 4
Q:: synchronized 和 ReentrantLock 有什么区别?
A:: synchronized 是 Java 提供的关键字,是一种隐式的锁机制,而 ReentrantLock 是 Java.util.
concurrent 包中的一个类,提供了更灵活和高级的锁机制。ReentrantLock 允许尝试锁定、定时锁定、非阻塞锁定,以及支持公平锁和非公平锁选择。而 synchronized 是隐式锁定的,且在异常时会自动释放锁,而 ReentrantLock 需要手动释放锁。
Step 5
Q:: synchronized 在 Java 内部是如何实现的?
A:: synchronized 的实现依赖于 JVM 内部的监视器锁(Monitor)。当线程进入 synchronized 方法或块时,它会尝试获取监视器锁,成功则进入临界区,否则等待锁的释放。这个锁的实现与操作系统相关,可能使用的是轻量级锁(如自旋锁)或重量级锁(如互斥锁),JVM 会根据竞争情况动态调整锁的实现。