标签题目
synchronized相关面试题
synchronized 和 ReentrantLock 有什么区别?
synchronized 是 JVM 层面的内置锁,语法简单,自动加锁释放;ReentrantLock 是 JUC 提供的显式锁,基于 AQS,功能更丰富。两者都可重入,都能保证互斥和可见性,但在使用方式、等待能力、公平性、条件队列和可中断性上差异明显。
String与StringBuffer的区别,StringBuffer如何实现线程安全的?
String与StringBuffer的区别,StringBuffer如何实现线程安全的?这道腾讯牛客题的关键是围绕“String、StringBuffer 与线程安全”讲清概念、机制、取舍和边界。String 是不可变对象,拼接会产生新对象或由编译器优化;StringBuffer 是可变字符序列,核心方法带 synchronized,因此同一实例的修改具备互斥;StringBuilder 也是可变字符序列,但不做同步,单线程更快。
同一个对象中两个 synchronized 方法分别被两个线程调用时会发生什么?
同一个对象中两个 synchronized 方法分别被两个线程调用时会发生什么?这道腾讯牛客题的关键是围绕“同一对象 synchronized 实例方法锁竞争”讲清概念、机制、取舍和边界。同一个对象里的两个 synchronized 实例方法使用的是同一把对象 monitor 锁。两个线程分别调用同一对象的两个 synchronized 方法时会互斥,先获得锁的线程执行,另一个线程进入 BLOCKED 等待。
synchronized 锁升级的过程是什么?
synchronized 锁升级的过程是什么?这道腾讯牛客题的关键是围绕“synchronized 锁升级过程”讲清概念、机制、取舍和边界。synchronized 锁升级是 JVM 为不同竞争强度优化 monitor 成本的过程,常见路径是无锁、偏向锁、轻量级锁、重量级锁。现代 JVM 版本对偏向锁支持有所变化,但面试回答仍要说明锁状态随竞争变化而升级。