本期说一下Synchronized的相关面试题。 原子性:确保线程互斥的访问同步代码 可见性:保证共享变量的修改能够及时可见。 有序性:有效解决指令重排问题。 答: 每个java对象都有一个与之相关联的监视器(monitor,底层在JVM中基于C++实现),监视器是一种内部锁或互斥锁。 使用Synchronized可以获取对象的监视器锁,从而创建临界区(monitorenter和monitorexit包围的指令范围),确保在同一时刻只有一个线程能够进入执行。 答: 无状态锁 偏向锁(Biased Locking) 在程序刚启动时,锁处于偏向锁状态。这时候,如果某个线程获取了锁,那么在一段时间内,该线程再次获取这个锁时,无需竞争,直接获得。这减少了锁竞争的开销。 偏向锁通过记录获取锁的线程ID,如果有其他线程尝试获取该锁,则需要撤销偏向锁,升级为轻量级锁。 轻量级锁(Lightweight Lock) 当多个线程竞争同一个锁时,偏向锁就会升级为轻量级锁。轻量级锁使用CAS操作(Compare and Swap)来尝试获取锁,而不是直接阻塞线程。 如果CAS操作失败,说明有竞争,这时候锁会升级为重量级锁。 重量级锁(Heavyweight Lock) 当锁升级到重量级锁时,会导致其他线程阻塞,只能等待持有锁的线程释放锁。 重量级锁的实现使用操作系统提供的互斥量(Mutex)等机制,具有较大的性能开销。 这种锁升级机制是为了在不同情况下权衡性能和资源占用。偏向锁适用于大多数情况下是单线程获取锁的场景,而轻量级锁和重量级锁适用于多线程竞争锁的情况。这样的设计可以在不同场景下提供更好的性能。 答: synchronized是 Java 中的关键字,用于实现同步。它在 Java 中是基于监视器(Monitor)的概念实现的,因此可以说是在 JVM 层面提供的锁。 以上内容出自本人整理的面试秘籍。 链接: https://pan.baidu.com/s/1o014Ems8diV0D3h8K15olA?pwd=fi3x 提取码: fi3x 复制这段内容后打开百度网盘手机App,操作更方便哦 工作日每天更新,周末随缘更新。 请关注我,以便及时获取最新内容哦!Synchronized的作用或者说一般用在什么场景?
说一下Synchronized的原理?
public class Example {
private Object lock = new Object();//
public void synchronizedMethod() {
synchronized (lock) {
// 临界区,只有一个线程能够执行这里的代码
// ...
}
}
}Synchronized是如何进行锁升级的?
Synchronized是JVM层面还是JDK层面的锁?
本文由 mdnice 多平台发布
标签:Synchronized,解锁,全攻略,获取,监视器,JVM,线程,轻量级 From: https://blog.csdn.net/zwsfamily/article/details/140851750