synchronized修饰实例方法以当前对象(this)为锁,同一时刻仅一个线程可执行该对象的任一同步实例方法;不同对象间互不干扰;非同步方法不受影响;可改用synchronized(this)代码块实现更细粒度控制。

synchronized 修饰实例方法,就是把 当前对象(this)作为锁,同一时刻只允许一个线程执行该对象的这个同步方法。其他线程若想调用该对象的任意 synchronized 实例方法,必须等待锁释放。
语法写法很直接
在方法的访问修饰符(如 public、private)和返回类型之间加上 synchronized 关键字即可:
public synchronized void doSomething() { ... }
private synchronized int getValue() { return count; }
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
关键行为:锁的是 this 对象
- 多个线程调用同一个对象的 synchronized 实例方法时,会竞争同一把锁,串行执行
- 多个线程调用不同对象的 synchronized 实例方法,互不干扰,各自持有自己的 this 锁
- 一个线程进入 synchronized 实例方法后,该对象的其他 synchronized 实例方法也无法被其他线程同时进入
常见误区提醒
- 不是“方法被锁”,而是“调用该方法的对象被锁”——重点在锁对象,不在方法签名
- 非 synchronized 方法可以被任意线程随时调用,不受 this 锁影响
- 如果希望跨多个实例统一控制(比如全局计数),synchronized 实例方法不够用,应改用 static 方法或显式锁对象
配合代码块更灵活
有时只需同步部分逻辑,可不用锁整个方法:
public void doSomething() {
synchronized(this) {
// 只有这里受 this 锁保护
}
// 这里可以并发执行
}
这种写法和修饰整个方法效果一致,但粒度更细,避免不必要的阻塞。
立即学习“Java免费学习笔记(深入)”;

















