Java面试题更新 2026-08-03

在Java中,用synchronized关键字分别修饰静态方法和普通实例方法时,两者的锁对象有何不同?请具体说明它们各自的锁定范围。

考察说明

考查synchronized锁机制及锁对象区别。

回答思路

  1. 【回答框架 1】synchronized修饰普通方法时,锁是当前实例对象(this),即调用该方法的对象,多个线程访问同一实例的该方法时互斥,但访问不同实例则不会互斥。
  2. 【回答框架 2】synchronized修饰静态方法时,锁是当前类的Class对象,即所有实例共享同一个锁,因此不同实例调用该方法也会互斥。
  3. 【回答框架 3】两者锁粒度不同:普通方法锁实例,静态方法锁类,需根据线程安全需求选择,例如静态方法可用于保护全局共享状态。
  4. 【回答框架 4】若需同时控制实例级别和类级别,可分别使用同步块或组合锁,注意锁顺序避免死锁。
  5. 【关键点 1】普通方法锁this,静态方法锁Class对象。
  6. 【关键点 2】静态方法锁对所有实例生效,普通方法锁仅对同一实例生效。
  7. 【关键点 3】锁粒度差异影响并发性能和隔离范围。
  8. 【易错点 1】混淆锁对象,认为静态方法与实例方法锁相同。
  9. 【易错点 2】忽略锁粒度差异,导致并发控制不足或过度同步。